我的json带有带有值阵列的字符串键字典。下面有他的结构:
{
"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; }
}
}
i捕获了一个null参考异常。我尝试创建不同的方式,但我仍然无法对其进行认可。我做错了什么?
您的模型可以只是这样的东西
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类是相同的。
我必须对其进行一些编辑以工作,所以我将其粘贴在下面:
{
"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"]
}
因此,考虑到您的初始想法是什么,您的代码应该看起来像:
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);