如何与json.net c#进行应对复杂的json



我的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);

相关内容

  • 没有找到相关文章

最新更新