JavaScriptSerializer:无法反序列化在属性名称中使用@符号的JSON

时间:2013-03-04 15:35:52

标签: c# .net javascriptserializer

我正在使用通过REST公开API的第三方服务器(因此无法更改JSON)。它返回的JSON格式如下:

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

我创建了一个C#对象来表示这个项目

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

但是,当我尝试使用JavaScriptSerializer反序列化此对象时,不会分配属性。序列化程序似乎无法使用名称前面的@符号处理属性。

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:2)

好的,经过一番调查后,我抛弃了JavaScriptSerializer。我切换到DataContractJsonSerializer。然后,我使用定义良好的数据协定,并使用DataMember属性指定名称。

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

可能有更好/不同的方式,但这是有效的并且是可接受的解决方案