我有以下课程:
public class Datum
{
public bool Prop1 { get; set; }
public bool Prop2 { get; set; }
public bool Prop3 { get; set; }
public bool Prop4 { get; set; }
public bool Prop5 { get; set; }
public bool Prop6 { get; set; }
}
public class Example
{
public IList<Datum> data { get; set; }
}
我在变量中有以下json:
var json = @"{'data': [
{
'Prop1': true,
'Prop2': true,
'Prop3': true,
'Prop4': true,
'Prop5': true,
'Prop6': true
},
{
'Prop1': true,
'Prop2': true,
'Prop3': true,
'Prop4': true,
'Prop5': true,
'Prop6': false
},
{
'Prop1': false,
'Prop2': true,
'Prop3': true,
'Prop4': true,
'Prop5': false,
'Prop6': false
},
{
'Prop1': false,
'Prop2': true,
'Prop3': true,
'Prop4': false,
'Prop5': false,
'Prop6': false
}]
}";
我正在使用Netonsoft JSON.NET将JSON反序列化为C#对象,如下所示:
var items = JsonConvert.DeserializeObject<List<Example>>(json);
但我收到以下错误:
Newtonsoft.Json.JsonSerializationException:'无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型'System.Collections.Generic.List`1 [ReadJson.Example]',因为该类型需要JSON数组(例如[1,2,3])以正确反序列化。 要解决此错误,可以将JSON更改为JSON数组(例如[1,2,3]),也可以更改反序列化类型,使其成为普通的.NET类型(例如,不像整数这样的原始类型,也不像这样的集合类型数组或列表),可以从JSON对象反序列化。还可以将JsonObjectAttribute添加到类型中,以强制其从JSON对象反序列化。 路径“数据”,第1行,位置8。”
我在一些在线C#编辑器中运行了完全相同的代码,这很好用。但是,当我在本地Visual Studio中尝试时,会出现错误。我正在使用Newtonsoft版本12及更高版本。
任何人都可以向我解释我的代码有什么问题。
谢谢。
答案 0 :(得分:7)
您没有Example
的列表。您有一个 Example
(单数)。 Example
具有data
属性;您的JSON仅包含该属性的一个实例,并且其包含的对象不在数组中。
所以
JsonConvert.DeserializeObject<Example>(json)