JavaScriptSerializer:不能反序列化属性名中使用@符号的JSON



我使用的是通过REST公开API的第三方服务器(因此不可能更改JSON)。它返回的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;}
    ....
}

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

最新更新