我有一种需要提高某种货币汇率的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 []'的类型定义无参数构造函数。
答案 0 :(得分:0)
埃文说。换句话说..您的代码需要构造函数,如:
.parent {
width: 1200px;
background-color: #333;
margin: 20px 0; /* outer margin doesn't matter */
}
.parent .child {
width: 400px;
height: 300px;
display: inline-block;
background-color: #ccc;
}
答案 1 :(得分:0)
您需要转换为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
。
答案 2 :(得分:0)
非常感谢您的回复。我设法让它运作起来。 自从我开始为我的公司编写整个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的知识,我会很感激分享。
再一次,衷心感谢你。