我有一个ASP.NET方法,需要提高一些货币汇率。
protected void btnTest_Click(object sender, EventArgs e)
{
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(string.Format("https://api.fixer.io/latest?base=JPY&symbols=SGD"));
WebReq.Method = "GET";
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
string jsonString;
using (Stream stream = WebResp.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
jsonString = reader.ReadToEnd();
}
JavaScriptSerializer js = new JavaScriptSerializer();
Item[] rates = js.Deserialize<Item[]>(jsonString);
for (int i = 0; i < rates.Length; i++)
{
Item rate = new Item();
rate = (Item) (rates[i]);
Rates rb=(Rates) rate.r;
lblResult.Text = lblResult.Text + rb.SGD;
}
}
这是Item.cs类
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ClientConsultationSystem
{
public class Rates
{
public double SGD { get; set; }
}
public class Item
{
public string b { get; set; }
public string d { get; set; }
public Rates r { get; set; }
}
}
不知道我做错了什么,但我得到了这个错误。
没有为'ClientConsultationSystem.Item []'的类型定义无参数构造函数。
您需要转换为List而不是Item [],因为JavascriptSerializer反序列化为IEnumerable。
我对您的代码进行了一些更改:
JavaScriptSerializer js = new JavaScriptSerializer();
var rates = js.Deserialize<List<Item>>(jsonString);
for (int i = 0; i < rates.Count; i++)
{
Item rate = new Item();
rate = (Item)(rates[i]);
Rates rb = (Rates)rate.rates;
}
public class Item
{
public string @base { get; set; }
public string date { get; set; }
public Rates rates { get; set; }
}
虽然反序列化使对象与源紧密匹配很重要。因为@base
是一个保留词,所以需要base
。
埃文说的话。换句话说..您的代码需要构造函数,如:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ClientConsultationSystem
{
public class Rates
{
public Rates() { } // optional constructor
public Double SGD { get; set; }
}
public class Item
{
public Item()
{
r = new Rates();
}
public String b { get; set; }
public string d { get; set; }
public Rates r { get; set; }
}
}
非常感谢您的回复。我设法让它运作起来。自从我开始为我的公司编程整个Intranet系统以来已经有一段时间了,所以我只依赖于我从Java获得的任何知识以及我为最后一年的项目编程所做的工作。
protected void Page_Load(object sender, EventArgs e)
{
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(string.Format("https://api.fixer.io/latest?base=JPY&symbols=SGD"));
WebReq.Method = "GET";
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
string json;
using (Stream stream = WebResp.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
json = reader.ReadToEnd();
}
var rates = JsonConvert.DeserializeObject<Item>(json);
Item r = new Item();
r = (Item)(rates);
Rates rb = (Rates)r.rates;
lblResult.Text = lblResult.Text + "" + rb.SGD;
}
Item类
public class Rates
{
public double SGD { get; set; }
}
public class Item
{
public Item()
{
rates = new Rates();
}
public string @base { get; set; }
public string date { get; set; }
public Rates rates { get; set; }
}
如果有任何资源/书籍可以帮助我在C#上建立我对JSON的知识,我将不胜感激。
再一次,非常感谢你的心底。