RestSharp JsonDeserializer,标识符中包含特殊字符

时间:2012-11-24 05:22:22

标签: c# json rest restsharp

我有一些来自Last.fm的JSON:

{
   "toptags":{
      "@attr":{
         "artist":"Whatever",
         "album":"Whatever"
      }
   }
}

是否有一种特殊的方法来设置RestSharp以使其识别 @attr ? @(AT符号)导致我出现问题,因为我无法创建与此匹配的标识符。

1 个答案:

答案 0 :(得分:1)

通过查看RestSharp源,可以启用它来进行数据协定反序列化,这似乎需要更改RestSharp源。

在SimpleJson.cs中搜索//#define SIMPLE_JSON_DATACONTRACT

然后您还需要创建数据合同(请参阅下面的“@ attr”):

[DataContract]
public class SomeJson
{
    [DataMember(Name = "toptags")]
    public Tags TopTags { get; set; }
}

[DataContract]
public class Tags
{
    [DataMember(Name = "@attr")]
    public Attr Attr { get; set; }
}

[DataContract]
public class Attr
{
    [DataMember(Name = "artist")]
    public string Artist { get; set; }

    [DataMember(Name = "album")]
    public string Album { get; set; }
}

没有尝试使用RestSharp,但它适用于这段代码,RestSharp使用DataContractJsonSerializer,可能你必须设置

SimpleJson.CurrentJsonSerializerStrategy =   
                    SimpleJson.DataContractJsonSerializerStrategy

我的测试:

var json = "{ \"toptags\":{ \"@attr\":{ \"artist\":\"Whatever\", \"album\":\"Whatever\" }}}";

var serializer = new  DataContractJsonSerializer(typeof(SomeJson));
var result = (SomeJson)serializer.ReadObject(
                               new MemoryStream(Encoding.ASCII.GetBytes(json)));