我有一个以下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
}]
答案 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);