Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 人们应该如何解释这个JSON结构?_C#_Arrays_Json_Parsing_Json.net - Fatal编程技术网

C# 人们应该如何解释这个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

我刚刚开始使用JSON,在读了几篇文章之后,我仍然不清楚我是在看数组、列表还是仅仅是一个对象。看起来像这样

{
  "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
vs
Array
对象是一组无序的名称/值对。对象以{(左大括号)开始,以}(右大括号)结束。每个名称后面跟有:(冒号),名称/值对之间用,(逗号)分隔

数组是值的有序集合。数组以[(左括号)开始,以](右括号)结束。值以,(逗号)分隔

来源:

在您的例子中,
“列表”
是一组
“字段”
对象

“分页”
是一个对象

“列表”和
“分页”都位于未命名的根对象中

工作点小提琴: 请参见上面小提琴控制台窗格中的输出

下面是如何声明类,以便将这个特定的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
vs
Array
对象是一组无序的名称/值对。对象以{(左大括号)开始,以}(右大括号)结束。每个名称后面跟有:(冒号),名称/值对之间用,(逗号)分隔

数组是值的有序集合。数组以[(左括号)开始,以](右括号)结束。值以,(逗号)分隔


来源:

如果它以{开头,它是一个对象。
如果它以[开头,它是一个数组。

如果它以{开头,它是一个对象。
如果它以[it's a array.

开头,我是否可以控制在调用时如何提取和格式化数据字符串?或者如果服务器给我外部卷曲,我无法将它们作为平方、句点?+1来获取教学方法和图像!通常调用方(您的代码)无法控制发送方(发送JSON的服务器/代码)。我使用此站点=>从给定的JSON(应该是有效的)字符串生成正确的嵌套C#类。我在我的答案中添加了一个工作dotNetFiddle。检查一下。一切都很好!哦,在像傻瓜一样看了几个小时后,我意识到