如何将 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 的回答是正确的。您不应该反序列化为对象列表,而是反序列化为包含该列表的类型
这可能是一个基本问题,但我在将 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 的回答是正确的。您不应该反序列化为对象列表,而是反序列化为包含该列表的类型