我正在尝试反序列化json,因为我在这里,所以显然运行不顺利。我不仅在寻求帮助以使其运行,而且还在一些链接中对其进行了解释,因为我找不到一个并且想学习。
var json = w.DownloadString(url);
var data = JsonConvert.DeserializeObject<Rates[]>(json);
Json看起来像这样:
{
"info":"text",
"sub":"text",
"data":[
{
"date":20181111,
"exchange":"New York",
"open":1000.43,
"high":1239.91,
"low":1231.41
},
{
"date":20181111,
"exchange":"New York",
"open":1000.43,
"high":1239.91,
"low":1231.41
}
]
}
我有这些课程:
public class Rates
{
public List<Data> data { get; set; }
}
public class Data
{
public int date { get; set; }
public string exchange { get; set; }
public double open { get; set; }
public double high { get; set; }
public double low { get; set; }
}
public class RootObject
{
public string info { get; set; }
public string sub { get; set; }
public List<Data> data { get; set; }
}
}
答案 0 :(得分:1)
有两个问题。
首先是您的JSON无效(至少在问题本身中)..您缺少数组右括号,但我怀疑这是一个错字。
除了您要反序列化到Rates
类中,而不是比率数组以外。
var data = JsonConvert.DeserializeObject<Rates>(json);
要通过费率枚举,请使用以下内容:
foreach(Data rate in data.data){
Console.WriteLine(rate.exchange);
}
答案 1 :(得分:0)
您返回的json字符串表示根对象。您的类看起来不错,您只是反序列化为错误的对象。 Rates
对象似乎是不必要的,除非您不关心'info'和'sub'字段。在这种情况下,您可以反序列化为Rates
对象。额外的属性只会被序列化程序忽略。
您将需要将json反序列化为根对象。
var root = JsonConvert.DeserializeObject<RootObject>(json);
然后,您可以像这样遍历数据对象:
foreach (Data dataItem in root.data)
{
// Do something with data
}
作为一个旁注,Rates[]
在json格式下看起来会像这样:
[
{
"data": [
{
"date":20181111,
"exchange":"New York",
"open":1000.43,
"high":1239.91,
"low":1231.41
},
{
"date":20181111,
"exchange":"New York",
"open":1000.43,
"high":1239.91,
"low":1231.41
}
]
},
{
"data": [
{
"date":20181111,
"exchange":"New York",
"open":1000.43,
"high":1239.91,
"low":1231.41
},
{
"date":20181111,
"exchange":"New York",
"open":1000.43,
"high":1239.91,
"low":1231.41
}
]
}
]