2013-03-04 62 views
0

我正在使用通過REST公開API的第三方服務器(因此無法更改JSON)。它返回的JSON是一樣的格式:JavaScriptSerializer:無法反序列化在屬性名稱中使用@符號的JSON

[ 
     { 
       "@noun":"tag", 
       "@version":0, 
       "@tag":"myFoo" 
     } 
    ] 

我創建了一個C#對象來表示此項目

public class ResponseItem 
    { 
     public string noun {get;set;} 
     ..... 
    } 

然而,當我嘗試使用JavaScriptSerializer反序列化這個對象,屬性做不被分配。序列化程序似乎無法在名稱前面使用@符號處理屬性。

關於如何解決這個問題的任何想法?

+0

你說你不能改變JSON的來源,但你可以過濾JSON文本在反序列化之前? – 2013-03-04 17:48:56

回答

2

好吧,所以經過一番折騰後,我放棄了JavaScriptSerializer。我切換到DataContractJsonSerializer。然後,我使用定義良好的數據合約,並使用DataMember屬性指定名稱。

[DataContract] 
public class ResponseItem 
{ 
    [DataMember(Name="@noun")] 
    public string Noun {get;set;} 
    .... 
} 

有可能是一個更好的/不同的方式,但這個工程,是一個可接受的解決方案

相關問題