2012-06-12 86 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[],並解決了反序列化問題。

希望它能幫助遇到此線程的其他人,或者至少讓他們找到別的東西。