Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用JSON.net c反序列化复杂的JSON#_C#_Json_Json.net_Deserialization - Fatal编程技术网

C# 如何用JSON.net c反序列化复杂的JSON#

C# 如何用JSON.net c反序列化复杂的JSON#,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,我有JSON和字符串键字典以及值数组。他的结构如下: { "NameA":{ "ParametersA":[ [104.3,5.368783], [104.212,2.57357],..., ], "ParametersB":[ [104.3,5.368783], [104.212,2.57357],..., ] }, "NameB":{ "ParametersA":[ [10

我有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":{[...]
    }
}
我为此创建类以获取如下数据:
dictionality
,参数是另一个类,包含数组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; }
    }
}
内部类深度
{
公共词典名称{get;set;}
内部类参数
{
[JsonProperty(“参数A”)]
公共IList A{get;set;}
[JsonProperty(“参数SB”)]
公共IList B{get;set;}
}
内部类参数
{
公共十进制[,]_顺序{get;set;}
}
}
我捕获了一个空引用异常。我尝试用不同的方法创建类,但仍然无法反序列化它。我做错了什么?

有一个很棒的工具,可以让你粘贴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; }
}
因此,在考虑了您最初的想法之后,您的代码应该是这样的:

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);
公共类秩序
{
公共列表参数a{get;set;}
公共列表参数b{get;set;}
}
var obj=JsonConvert.DeserializeObject(json);

您的模型可以是这样的

public class Parameters
{
    public List<List<decimal>> ParametersA { get; set; }
    public List<List<decimal>> ParametersB { get; set; }
}
公共类参数
{
公共列表参数a{get;set;}
公共列表参数b{get;set;}
}
现在可以反序列化为

var dict = JsonConvert.DeserializeObject<Dictionary<string, Parameters>>(json);
var dict=JsonConvert.DeserializeObject(json);

将您的课程分开。我知道,使用相同的服务。但我有数千个键,其中N可以是3000-4000。早些时候,我将同一个JSON反序列化到字典中,其中NameA..N位于另一个对象中,但在这个JSON中,我遇到了麻烦…我编辑了我的答案。根对象是一个字典
var dict = JsonConvert.DeserializeObject<Dictionary<string, Parameters>>(json);