繁体   English   中英

在C#中反序列化数组的数组

[英]Deserialize Array of arrays in C#

我有以下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”}),也可以将反序列化类型更改为数组,或者将实现集合接口的类型(例如ICollection,IList)更改为List,例如List从JSON数组反序列化。 还可以将JsonArrayAttribute添加到类型中,以强制其从JSON数组反序列化。 路径“ [0]”,第1行,位置2。

需要解决方案如何反序列化这种数组字符串,因为此代码对于以下数组运行良好

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

如果您仍想使用JSON序列化,则可以使用如下所示的内容。下面的一种适用于JSON

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

如果要创建列表PointElement的列表作为json 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM