JavaScriptSerializer:无法反序列化在属性名称中使用@符号的JSON
问题描述:
我正在使用通过REST公开API的第三方服务器(因此无法更改JSON)。它返回的JSON是一样的格式:JavaScriptSerializer:无法反序列化在属性名称中使用@符号的JSON
[
{
"@noun":"tag",
"@version":0,
"@tag":"myFoo"
}
]
我创建了一个C#对象来表示此项目
public class ResponseItem
{
public string noun {get;set;}
.....
}
然而,当我尝试使用JavaScriptSerializer反序列化这个对象,属性做不被分配。序列化程序似乎无法在名称前面使用@符号处理属性。
关于如何解决这个问题的任何想法?
答
好吧,所以经过一番折腾后,我放弃了JavaScriptSerializer。我切换到DataContractJsonSerializer。然后,我使用定义良好的数据合约,并使用DataMember属性指定名称。
即
[DataContract]
public class ResponseItem
{
[DataMember(Name="@noun")]
public string Noun {get;set;}
....
}
有可能是一个更好的/不同的方式,但这个工程,是一个可接受的解决方案
你说你不能改变JSON的来源,但你可以过滤JSON文本在反序列化之前? – 2013-03-04 17:48:56