2013-03-04 34 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;} 
    .... 
} 

有可能是一个更好的/不同的方式,但这个工程,是一个可接受的解决方案

相关问题