如何将 JSON 响应转换为 C# 中的列表?

How to convert JSON Response to a List in C#?

这可能是一个基本问题,但我在将 JSON 响应转换为列表时卡住了。 我收到 JSON 响应,

{"data":[{"ID":"1","Name":"ABC"},{"ID":"2","Name":"DEF"}]}

已经定义了一个Class,

class Details
{
    public List<Company> data { get; set; }

}
class Company
{
    public string ID { get; set; }

    public string Name { get; set; }
}

已尝试使用此方法进行转换,

List<Details> obj=List<Details>)JsonConvert.DeserializeObject
   (responseString,     typeof(List<Details>));

但是这个 returns 一个错误,说

无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[Client.Details]',因为该类型需要一个 JSON 数组(例如 [1,2,3]) 以正确反序列化。

要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的原始类型,也不是像数组或列表这样的集合类型)可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型以强制它从 JSON 对象反序列化。

请帮忙!

你需要这样反序列化:

var Jsonobject = JsonConvert.DeserializeObject<Details>(json);

使用由json2csharp.com生成的类:

var Jsonobject = JsonConvert.DeserializeObject<RootObject>(json);

你的 类 应该是:

public class Datum
{
public string ID { get; set; }
public string Name { get; set; }
}

public class RootObject
{
public List<Datum> data { get; set; }
}

您始终可以使用 json2csharp.com 为 json 生成正确的 类。

您的 JSON 中没有定义 List<Detail>。您的 JSON 定义了 一条 Detail 记录,它本身有一个公司列表。

只需使用 Details 作为类型进行反序列化,而不是 List<Details>(或者,如果可能,使 JSON 将单个详细记录包装到一个单项数组中)。

您可以使用 JavaScriptDeserializer class

string json = @"{""data"":[{""ID"":""1"",""Name"":""ABC""},{""ID"":""2"",""Name"":""DEF""}]}";
Details details = new JavaScriptSerializer().Deserialize<Details>(json);

编辑:是的,OP 的方法没有任何问题,Servy 的回答是正确的。您不应该反序列化为对象列表,而是反序列化为包含该列表的类型