我有一些JSON数据,如下所示:
[
{"Article":
{
"ArticleID":0,
"EngTitle":"Area of Interest",
"EngExcerpt":"",
"EngBody":"",
"ArticleTag":
{
"TagAttribute1":"Selection",
"TagAttribute2":"AreaOfInterest"
}
}
}
]
对我来说看起来很好但是当它被传递给调用DeserializeObject的方法时,会导致错误。
以下是我要反序列化对象的代码:
List<ArticleJson> lstArticleJson = JsonConvert.DeserializeObject<List<ArticleJson>>(jsonData);
以下是相关型号:
public class ArticleJson
{
public Article Article { get; set; }
}
public partial class Article : BaseModel
{
public Article()
{
this.ArticleTag = new HashSet<ArticleTag>();
}
public string EngTitle { get; set; }
public string EngExcerpt { get; set; }
public string EngBody { get; set; }
public virtual IEnumerable<ArticleTag> ArticleTag { get; set; }
}
public partial class ArticleTag : BaseModel
{
public string TagAttribute1 { get; set; }
public string TagAttribute2 { get; set; }
}
我无法看到我需要更改以纠正引发的错误: -
无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.IEnumerable`1 [Model.ArticleTag]',因为该类型需要JSON数组(例如[1] ,2,3]正确地反序列化。
要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是可以从JSON对象反序列化的集合类型,如数组或List)。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。
路径'[0] .Article.ArticleTag.TagAttribute1',第1行,第1538位。
答案 0 :(得分:0)
尝试使用此修改更改您的JSON:
"ArticleTag":
[
{"TagAttribute1":"Selection",
"TagAttribute2":"AreaOfInterest"}
]
这是因为你有IEnumerable<ArticleTag>
所以即使你只发送一个对象,你仍然需要将它指定为JSON数组,让绑定器感到高兴。
以同样的方式,您无法在C#
中执行此操作IEnumerable<Foo> foos = new Foo();
您发布的错误甚至会告诉您:
要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为正常的.NET类型(例如,不是可以从JSON对象反序列化的原始类型,如整数,而不是像数组或List这样的集合类型。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。
答案 1 :(得分:0)
我所要做的就是在JSON中添加几个方括号。