解决JSON的问题

时间:2014-03-21 10:30:02

标签: c# json serialization json.net

我有一些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位。

2 个答案:

答案 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中添加几个方括号。