我刚刚开始使用JSON,在阅读了一些文章之后,我仍然不清楚我是在查看数组,列表还是仅仅是一个对象。它看起来像这样。
{
"list": [{
"fields": {
"id": "9222115557374550596",
...
},
},
{
"fields": {
"id": "9222115557374550597",
...
},
}],
"paging": {
"pageCurrent": 0,
"itemMin": 0,
"itemMax": 2,
"maxNextPages": 0,
"pageSize": 100
}
}
我想将其反序列化为对象类型的列表(或 IEnumerable ),以便有一个 Id 属性(可能不是 all 字段必须解析到对象中。
当我尝试使用以下代码执行此操作时:
List<Some> somes = JsonConvert.DeserializeObject<List<Some>>(dataAbove);
class Some { public String Id { get; set; } }
我收到一条很长的错误消息,说我没有使用正确的类型和数组以及一些让我困惑的其他东西。我是在正确的轨道还是我完全离开并迷路了?!
我理解它与根目录中的列表有关。但是什么?!或者至少 - 我应该谷歌什么?!
无法将当前JSON对象(例如{\“name \”:\“value \”})反序列化为类型'System.Collections.Generic.List`1 [ScriveProxy.Template]',因为该类型需要JSON数组(例如[1,2,3])正确反序列化。\ u000d \ u000a要解决此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型以使其正常.NET类型(例如,不是像整数这样的基本类型,不是类似于数组或列表的集合类型),可以从JSON对象反序列化。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。\ u000d \ u000aPath'list',第1行,第8位。“
它不能是this one,因为外括号是卷曲的而不是方形的......
在this solution中,我们最终得到一个对象,而不是一个数组,因此它不是我的目标。
答案 0 :(得分:4)
在您的情况下,"list"
是"fields"
个对象的数组。
"paging"
是一个对象。
"list"` and
&#34; paging&#34;`都在一个未命名的根对象中。
请参阅上面小提琴控制台窗格中的输出。
这里&#39; s如何声明您的类以将此特定JSON反序列化为C#类。
public class Fields
{
public string id { get; set; }
}
public class TheFields
{
public Fields fields { get; set; }
}
public class Paging
{
public int pageCurrent { get; set; }
public int itemMin { get; set; }
public int itemMax { get; set; }
public int maxNextPages { get; set; }
public int pageSize { get; set; }
}
public class RootObject
{
[Newtonsoft.Json.JsonPropertyAttribute("list")]
public List<TheFields> FieldsList { get; set; }
public Paging paging { get; set; }
}
以下是你将整个事情反序列化的方法。
var rootObject = JsonConvert.DeserializeObject<RootObject>(jsonString);
由于List
是关键字,为了避免混淆和冲突,我将其名称更改为FieldsList
,并将List
类重命名为TheFields
类。您可以选择您认为合适的任何其他名称。
Object
vs Array
对象是一组无序的名称/值对。对象以{(左括号)开头,以}结尾(右大括号)。每个名称后跟:(冒号),名称/值对用(逗号)分隔。
数组是有序的值集合。数组以[(左括号)开头,以]结尾(右括号)。值以(逗号)分隔。
答案 1 :(得分:1)
如果它以{它是一个对象开头。 如果它以[它是一个数组。
开头