这可能是一个基本问题,但我在将JSON响应转换为List时遇到困难。 我正在获得JSON响应,
{"data":[{"ID":"1","Name":"ABC"},{"ID":"2","Name":"DEF"}]}
定义了一个类,
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>));
但这会返回错误,说
无法将当前JSON对象(例如{&#34; name&#34;:&#34; value&#34;})反序列化为类型System.Collections.Generic.List`1 [Client.Details ]&#39;因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。
要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是可以从JSON对象反序列化的集合类型,如数组或List)。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。
请帮忙!
答案 0 :(得分:2)
您的JSON中未定义List<Detail>
。您的JSON定义了一个 Detail
记录,该记录本身有一个公司列表。
只需使用Details
作为类型反序列化,而不是List<Details>
(或者,如果可能的话,使JSON将单个详细记录包装成一个项目数组)。
答案 1 :(得分:0)
你需要像这样反序列化:
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生成正确的类。
击>
答案 2 :(得分:0)
您可以使用JavaScriptDeserializer
类
string json = @"{""data"":[{""ID"":""1"",""Name"":""ABC""},{""ID"":""2"",""Name"":""DEF""}]}";
Details details = new JavaScriptSerializer().Deserialize<Details>(json);
编辑:是的,OP的方法没有错,Servy的答案是正确的。您应该反序列化不是对象列表,而是反序列化包含该列表的类型