在C#

时间:2018-09-02 09:05:03

标签: c# asp.net arrays json asp.net-mvc

我有一个以下json:需要在C#中反序列化。

[
    [{
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99996662139893
    }, {
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99995589256287
    }],    
    [{
        "ElementName": "H2 ",
        "lat": 51.394319720562514,
        "lng": -109.99996662139893
    }, {
        "ElementName": "H2 ",
        "lat": 51.394319720562514,
        "lng": -109.99995589256287
    }]
]

我已经编写了以下代码对其进行反序列化。

public  class PointElement
{
    public string ElementName { get; set; }

    public double lat { get; set; }
    public double lng { get; set; }
}

var testPointList = JsonConvert.DeserializeObject<List<PointElement>>(testNewJson);

但是控制台显示错误

  

Controllers.PointElementRecord',因为类型需要JSON   对象(例如{“ name”:“ value”})正确反序列化。要解决这个问题   错误,或者将JSON更改为JSON对象(例如{“ name”:“ value”})   或将反序列化类型更改为实现的数组或类型   像List这样的集合接口(例如ICollection,IList)可以   从JSON数组反序列化。 JsonArrayAttribute也可以是   添加到类型以强制其从JSON数组反序列化。路径   '[0]',第1行,位置2。

需要解决方案,因为该代码在下面的数组中运行良好,因此如何反序列化此类数组字符串

[{
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99996662139893
    }, {
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99995589256287
}]

2 个答案:

答案 0 :(得分:2)

如果您仍想使用JSON序列化JSON,则可以像下面这样使用:以下一种适用于JSON

JsonConvert.DeserializeObject<List<PointElement[]>>(testJson);

答案 1 :(得分:0)

如果要创建列表PointElement的列表作为JSON描述,则json转换器应从 List> 而不是 List 进行转换>:

var testPointList = JsonConvert.DeserializeObject<List<List<PointElement>>>(testNewJson)

或者,如果您要创建 PointElement的单个列表,则您的json需要放在带有嵌套数组的[]括号内:

[
    {
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99996662139893
    }, {
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99995589256287
    },    
    {
        "ElementName": "H2 ",
        "lat": 51.394319720562514,
        "lng": -109.99996662139893
    }, {
        "ElementName": "H2 ",
        "lat": 51.394319720562514,
        "lng": -109.99995589256287
    }
]

然后您可以致电

var testPointList = JsonConvert.DeserializeObject<List<PointElement>>(testNewJson);