2012-06-12 55 views
1

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

我的班级是这样的:

​​

和以外的所有DSNAME才能正确反序列化。要转换的Json是这样的:

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

任何想法如何去解决这个问题?先谢谢你。

+0

尝试将您的Dsname更改为DsName,命名约定有时会导致问题 – nkchandra

回答

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”的值不是默认VAL我们来验证它是否正确无误。

+0

谢谢,此工作完美!看起来我仍然有吨阅读关于JSON和Json.Net。 – Martin

1

好吧,我意识到,这是一个相当古老的线程。但是我之前遇到过类似的问题,并且遇到了这个线程。

在我来说,我是想SE类/反序列化它有一个List<ClassName>公共财产。哪个序列化好,但不会反序列化。我把它切换到ClassName[],并解决了反序列化问题。

希望它能帮助遇到此线程的其他人,或者至少让他们找到别的东西。