如何使用JSON.net反序列化复杂的JSON c#
我有字符串键值字典字典的JSON。有他的结构如下:如何使用JSON.net反序列化复杂的JSON c#
{
"NameA":{
"ParametersA":[
[104.3,5.368783],
[104.212,2.57357],...,
],
"ParametersB":[
[104.3,5.368783],
[104.212,2.57357],...,
]
},
"NameB":{
"ParametersA":[
[104.3,5.368783],
[104.212,2.57357],...,
],
"ParametersB":[
[104.3,5.368783],
[104.212,2.57357],...,
]
},
"ThousandsNamesN":{[...]
}
}
我为此创建类来获得这样的数据:Dictionaty<key=NameA, value=List<Parameters>>
和参数是另一个类到数组A和B.
这是我的根类:
internal class RawDepth
{
public Dictionary<string, Parameters> Names { get; set; }
internal class Parameters
{
[JsonProperty("ParametersA")]
public IList<Orders> A { get; set; }
[JsonProperty("ParametersB")]
public IList<ParamsArray> B { get; set; }
}
internal class ParamsArray
{
public decimal[,] _Orders { get; set; }
}
}
我捕捉到一个空引用异常。我尝试了不同的方式创建类,但我仍然无法对它进行反序列化。我做错了什么?
您的模型可以简单地这样的事情
public class Parameters
{
public List<List<decimal>> ParametersA { get; set; }
public List<List<decimal>> ParametersB { get; set; }
}
现在你可以反序列化作为
var dict = JsonConvert.DeserializeObject<Dictionary<string, Parameters>>(json);
谢谢,它的工作! –
有一个伟大的工具json2csharp,它可以让你粘贴JSON,并从它生成C#类。这就是我从你的样本中得到的结果:
public class NameA
{
public List<List<double>> ParametersA { get; set; }
public List<List<double>> ParametersB { get; set; }
}
public class NameB
{
public List<List<double>> ParametersA { get; set; }
public List<List<double>> ParametersB { get; set; }
}
public class RootObject
{
public NameA NameA { get; set; }
public NameB NameB { get; set; }
public List<string> ThousandsNamesN { get; set; }
}
我想我们可以放心地假设NameA和NameB类是相同的。
我不得不编辑JSON一点FOT它的工作,所以我将它粘贴在下面:
{
"NameA":{
"ParametersA":[
[104.3,5.368783],
[104.212,2.57357],
],
"ParametersB":[
[104.3,5.368783],
[104.212,2.57357],
]
},
"NameB":{
"ParametersA":[
[104.3,5.368783],
[104.212,2.57357],
],
"ParametersB":[
[104.3,5.368783],
[104.212,2.57357],
]
},
"ThousandsNamesN":["name1", "name2"]
}
所以考虑到什么是你initail的想法后,你的代码应该看起来像:
public class Order
{
public List<List<double>> ParametersA { get; set; }
public List<List<double>> ParametersB { get; set; }
}
var obj = JsonConvert.DeserializeObject<Dictionary<string, Order>>(json);
我知道,使用相同的服务。但是,我拥有数千个密钥NameA,NameB,... NameN,其中N可以是3000-4000。早期我反序列化相同的JSON到字典,其中NameA..N在另一个对象,但在这个JSON我有麻烦... –
我编辑了我的答案。你的根对象是一本字典 –
谢谢!是工作! –
分开你的课程。 – Kixoka