C# 使用JSON.NET解析数据

C# 使用JSON.NET解析数据,c#,.net,json,json.net,C#,.net,Json,Json.net,我有一个类似这样的json “[{”item:{“id”:1,“name”:“abc”},item:{“id”:1,“name”:“abc”}]” 如何使用(Linq)json.NET解析这些项并将它们保存为这个json中的Item(我定义的一个类) 我发现了,但我不知道如何解析对象(项)列表,因为在这种情况下,有多个“项”,每个“项”都是由其他数据组成的实际上非常简单: YourClass foo = JsonConvert.DeserializeObject<YourClass>

我有一个类似这样的json

“[{”item:{“id”:1,“name”:“abc”},item:{“id”:1,“name”:“abc”}]”

如何使用(Linq)json.NET解析这些项并将它们保存为这个json中的Item(我定义的一个类)


我发现了,但我不知道如何解析对象(项)列表,因为在这种情况下,有多个“项”,每个“项”都是由其他数据组成的

实际上非常简单:

YourClass foo = JsonConvert.DeserializeObject<YourClass>(YourJSONString);
YourClass foo=JsonConvert.DeserializeObject(YourJSONString);
编辑#1:

但是你问起转换数组的问题,我没有注意到。我相信即使你的JSON是这些对象的数组,也很容易做到。我刚刚写了一个小例子,但我使用的是列表而不是数组:

List<string> foo = new List<string>() { "Hello", "World" };

string serialized = JsonConvert.SerializeObject(foo);

List<string> bar = JsonConvert.DeserializeObject<List<string>>(serialized);

foreach (string s in bar)
{
  Console.WriteLine(s);
}
List foo=newlist(){“你好”,“世界”};
string serialized=JsonConvert.serialized对象(foo);
列表栏=JsonConvert.DeserializeObject(序列化);
foreach(条形图中的字符串s)
{
控制台。写入线(s);
}
编辑#2:

我对您的Json字符串做了一个更改,因为它无法按您的方式工作

public class item
{
  public int id { get; set; }
  public string name { get; set; }
}

string json = "[{\"item\" : { \"id\":1 , \"name\":\"abc\" }} , {\"item\" : { \"id\":1 , \"name\":\"abc\"}}]";

List<item> items = JsonConvert.DeserializeObject<List<item>>(json);
公共类项目
{
公共int id{get;set;}
公共字符串名称{get;set;}
}
字符串json=“[{\'item\':{\'id\':1,\'name\':\'abc\'},{\'item\':{\'id\':1,\'name\':\'abc\'}]”;
List items=JsonConvert.DeserializeObject(json);

仅供参考,您上面的JSON格式不正确。不确定这是问题中的输入错误还是您从代码中复制粘贴的。@巴德斯库,我更新了我的答案,加入了一个将JSON字符串中的对象列表转换为C表示的示例。@Brian JSON是手工编写的,已经更正了。@Frank我已经回复了对于您的回答,请查看itthanks以获得答复。我实际上不知道的是如何浏览json头的子项,在我的示例“item”中。我不知道如何迭代json字符串(即使用某种形式的“for”,以便我可以解析所有项)。如果您知道我的“item”,请详细说明这一点示例?我不明白您为什么要手动解析它。如果您使用的是Json.NET,那么您可以反序列化对象,通过foreach操作对象,然后将对象序列化回Json。因为它的工作方式与您演示的不同。下面是我的代码:List RList=JsonConvert.DeserializeObject(Json);foreach(RList中的餐厅R){Console.WriteLine(R.name);}它说它不能反序列化到泛型列表中