C# 人们应该如何解释这个JSON结构?
我刚刚开始使用JSON,在读了几篇文章之后,我仍然不清楚我是在看数组、列表还是仅仅是一个对象。看起来像这样C# 人们应该如何解释这个JSON结构?,c#,arrays,json,parsing,json.net,C#,Arrays,Json,Parsing,Json.net,我刚刚开始使用JSON,在读了几篇文章之后,我仍然不清楚我是在看数组、列表还是仅仅是一个对象。看起来像这样 { "list": [{ "fields": { "id": "9222115557374550596", ... }, }, { "fields": { "id": "9222115557374550597", ... }, }], "paging": { "pageCurrent
{
"list": [{
"fields": {
"id": "9222115557374550596",
...
},
},
{
"fields": {
"id": "9222115557374550597",
...
},
}],
"paging": {
"pageCurrent": 0,
"itemMin": 0,
"itemMax": 2,
"maxNextPages": 0,
"pageSize": 100
}
}
我希望将其反序列化为类型化对象的列表(或IEnumerable),以便有一个Id属性(可能不是所有的字段都必须解析到对象中)
当我尝试使用以下代码执行此操作时:
List<Some> somes = JsonConvert.DeserializeObject<List<Some>>(dataAbove);
class Some { public String Id { get; set; } }
List somes=JsonConvert.DeserializeObject(上面的数据);
为某些{publicstringid{get;set;}}初始化
我收到一条很长的错误消息,说我没有使用正确的类型和数组,还有一些其他东西让我感到困惑。我是走对了路,还是完全迷路了
我知道这是一个从根本上看清单的问题。但是什么?!或者至少-我应该用谷歌搜索什么
无法将当前JSON对象(例如{“name\”:“value\”})反序列化为类型“System.Collections.Generic.List`1[ScriveProxy.Template]”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。\u000d\u000d若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或者更改反序列化类型,使其成为可以从JSON对象反序列化的普通.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制其从JSON对象反序列化。\u000d\u000a第1行第8位的“列表”
这不可能是因为外括号是卷曲的而不是方括号
在中,我们最终得到的是一个对象,而不是一个数组,因此这也不是我的目标。在您的例子中,“list”
是一个由“fields”
对象组成的数组
“分页”
是一个对象
“列表”和
“分页”都位于未命名的根对象中
工作点小提琴:
请参见上面小提琴控制台窗格中的输出
下面是如何声明类,以便将这个特定的JSON反序列化为C#类
公共类字段
{
公共字符串id{get;set;}
}
公共领域
{
公共字段{get;set;}
}
公共类分页
{
public int pageCurrent{get;set;}
公共int itemMin{get;set;}
公共int itemMax{get;set;}
公共int maxNextPages{get;set;}
公共int pageSize{get;set;}
}
公共类根对象
{
[Newtonsoft.Json.JsonPropertyAttribute(“列表”)]
公共列表字段列表{get;set;}
公共分页{get;set;}
}
下面是你将如何反序列化整件事
var rootObject = JsonConvert.DeserializeObject<RootObject>(jsonString);
var rootObject=JsonConvert.DeserializeObject(jsonString);
由于List
是一个关键字,为了避免混淆和冲突,我将其名称更改为FieldsList
,并将List
类重命名为TheFields
类。您可以选择任何其他您认为合适的名称
关于Object
vsArray
对象是一组无序的名称/值对。对象以{(左大括号)开始,以}(右大括号)结束。每个名称后面跟有:(冒号),名称/值对之间用,(逗号)分隔
数组是值的有序集合。数组以[(左括号)开始,以](右括号)结束。值以,(逗号)分隔
来源:在您的例子中,“列表”
是一组“字段”
对象
“分页”
是一个对象
“列表”和
“分页”都位于未命名的根对象中
工作点小提琴:
请参见上面小提琴控制台窗格中的输出
下面是如何声明类,以便将这个特定的JSON反序列化为C#类
公共类字段
{
公共字符串id{get;set;}
}
公共领域
{
公共字段{get;set;}
}
公共类分页
{
public int pageCurrent{get;set;}
公共int itemMin{get;set;}
公共int itemMax{get;set;}
公共int maxNextPages{get;set;}
公共int pageSize{get;set;}
}
公共类根对象
{
[Newtonsoft.Json.JsonPropertyAttribute(“列表”)]
公共列表字段列表{get;set;}
公共分页{get;set;}
}
下面是你将如何反序列化整件事
var rootObject = JsonConvert.DeserializeObject<RootObject>(jsonString);
var rootObject=JsonConvert.DeserializeObject(jsonString);
由于List
是一个关键字,为了避免混淆和冲突,我将其名称更改为FieldsList
,并将List
类重命名为TheFields
类。您可以选择任何其他您认为合适的名称
关于Object
vsArray
对象是一组无序的名称/值对。对象以{(左大括号)开始,以}(右大括号)结束。每个名称后面跟有:(冒号),名称/值对之间用,(逗号)分隔
数组是值的有序集合。数组以[(左括号)开始,以](右括号)结束。值以,(逗号)分隔
来源:如果它以{开头,它是一个对象。
如果它以[开头,它是一个数组。如果它以{开头,它是一个对象。
如果它以[it's a array.开头,我是否可以控制在调用时如何提取和格式化数据字符串?或者如果服务器给我外部卷曲,我无法将它们作为平方、句点?+1来获取教学方法和图像!通常调用方(您的代码)无法控制发送方(发送JSON的服务器/代码)。我使用此站点=>从给定的JSON(应该是有效的)字符串生成正确的嵌套C#类。我在我的答案中添加了一个工作dotNetFiddle。检查一下。一切都很好!哦,在像傻瓜一样看了几个小时后,我意识到