【问题标题】:Deserialize Array of arrays in C#在 C# 中反序列化数组数组
【发布时间】:2019-02-07 16:02:26
【问题描述】:

我有以下 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 可以 从 JSON 数组反序列化。 JsonArrayAttribute 也可以 添加到类型以强制它从 JSON 数组反序列化。小路 '[0]',第 1 行,位置 2。

需要解决如何反序列化这种数组字符串,因为这段代码在下面的数组中运行良好

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

【问题讨论】:

  • 您应该编辑您的 JSON 字符串并删除其中的括号。

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


【解决方案1】:

如果你想创建一个 list 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);

【讨论】:

    【解决方案2】:

    如果你仍然想用你的 JSON 序列化你可以像下面这样使用下面的一个适用于你的 JSON

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

    【讨论】:

      猜你喜欢
      • 2013-05-27
      • 1970-01-01
      • 2012-04-10
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2021-05-04
      • 1970-01-01
      相关资源
      最近更新 更多