C# 在C中反序列化json时出现问题;无法反序列化当前JSON对象";
我正在尝试对json进行反序列化,很明显,由于我在这里,它进展得并不顺利。我不仅在寻找帮助,使它的工作,但也有一些链接,它解释了它是如何工作的,因为我找不到一个,我想学习C# 在C中反序列化json时出现问题;无法反序列化当前JSON对象";,c#,json,C#,Json,我正在尝试对json进行反序列化,很明显,由于我在这里,它进展得并不顺利。我不仅在寻找帮助,使它的工作,但也有一些链接,它解释了它是如何工作的,因为我找不到一个,我想学习 var json = w.DownloadString(url); var data = JsonConvert.DeserializeObject<Rates[]>(json); 我有以下课程: public class Rates { public List<Data&
var json = w.DownloadString(url);
var data = JsonConvert.DeserializeObject<Rates[]>(json);
我有以下课程:
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; }
}
}
公共类费率
{
公共列表数据{get;set;}
}
公共类数据
{
公共整数日期{get;set;}
公共字符串交换{get;set;}
公共双开{get;set;}
公共双高{get;set;}
公共双低位{get;set;}
}
公共类根对象
{
公共字符串信息{get;set;}
公共字符串sub{get;set;}
公共列表数据{get;set;}
}
}
有两个问题
首先,您的JSON是无效的(至少在问题本身中是如此)。。您缺少一个数组结束括号,但我怀疑这是一个输入错误
除此之外,您希望反序列化到Rates
类而不是Rates数组中
var data=JsonConvert.DeserializeObject(json)代码>
列举各种费率。。使用以下命令:
foreach(Data rate in data.data){
Console.WriteLine(rate.exchange);
}
查看此返回的json字符串表示根对象。您的类看起来不错,只是反序列化到了错误的对象中。Rates
对象似乎没有必要,除非您不关心“info”和“sub”字段。在这种情况下,您可以反序列化为Rates
对象。额外的属性将被序列化程序忽略
您需要将json反序列化到根对象中
var root = JsonConvert.DeserializeObject<RootObject>(json);
作为旁注,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
}
]
}
]
看起来我把它弄糟了,把它缩短了。我会尽快修复它,这是一个打字错误,但现在已经修复了。谢谢你,但是我该如何循环浏览这个费率列表呢?不是enumerable@user10990200请参阅编辑和更新的dotnetfiddle。@user10990200:Re:“如何循环浏览该费率列表”。您没有“速率列表”,而是有一个包含两个字符串和一个数据列表的速率实例。数据列表是可枚举的。谢谢,被认为是正确的。有什么好的读物可以学习如何理解这一点吗?这已经不是我第一次在c语言中遇到反序列化问题了,这要看json是什么样子了。。如果它是一个数组,也就是说,它看起来像这样:[{x:1},{x:2}],那么你有一个数组,但是你可以看到你的左括号是{,所以它是一个单独的对象。
foreach (Data dataItem in root.data)
{
// Do something with data
}
[
{
"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
}
]
}
]