Json.Net JsonConvert没有正确反序列化?

时间:2012-06-12 12:19:07

标签: windows-phone-7 json.net

我正在使用Json.Net来处理我的应用程序中来自Pipl.com API的API调用的响应的反序列化,并且它工作正常但是由于某些奇怪的原因它不会反序列化JSON的特定属性我提供给JsonConvert.DeserializeObject方法的字符串。

我的课是这样的:

public class Source
{
    public string Dsname { get; set; }
    public bool IsSponsored { get; set; }

    public string Url { get; set; }
    public string Domain { get; set; }

    public uint ExternalID { get; set; }

    public Source()
    {

    }
}

并且除了Dsname之外的所有内容都会被正确反序列化。要转换的Json是这样的:

"source": {                    
    "@is_sponsored": false,
    "@ds_name": "Personal Web Space -MySpace",
    "url": "http://www.foo.bar"
    "domain": "myspace.com"
}

知道怎么解决这个问题吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

我添加了一个包装类,并将属性名称指定为属性,如下所示:

public class Source
{
    [JsonProperty(PropertyName = "@ds_name")]
    public string Dsname { get; set; }

    [JsonProperty(PropertyName = "@is_sponsored")]
    public bool IsSponsored { get; set; }

    public string Url { get; set; }

    public string Domain { get; set; }

    public uint ExternalID { get; set; }
}

public class RootObject
{
    public Source source { get; set; }
}

然后我能够反序列化罚款:

var json = "{\"source\": { \"@is_sponsored\": true, \"@ds_name\": \"Personal Web Space -MySpace\", \"url\": \"http://www.foo.bar\", \"domain\": \"myspace.com\"}}";

var des = JsonConvert.DeserializeObject<RootObject>(json);

请注意我:
- 将样品包裹在花括号中,使其成为有效的JSON
- 添加了一个缺少的逗号
- 将“@is_sponsored”的值更改为不是默认值,以验证它是否已正确解除序列化。

答案 1 :(得分:1)

好的,我知道,这是一个非常古老的主题。但是我之前遇到过类似的问题并遇到了这个问题。

在我的情况下,我尝试se / deserialize的课程中有一个List<ClassName>公共财产。序列化很好,但不会反序列化。我将其切换到ClassName[]并修复了反序列化问题。

希望它可以帮助遇到这个帖子的其他人,或者至少给他们一些其他东西来寻找。