【问题标题】:RestSharp JsonDeserializer with special characters in identifiers标识符中带有特殊字符的 RestSharp JsonDeserializer
【发布时间】:2013-06-14 21:19:18
【问题描述】:

我有一些来自 Last.fm 的 JSON,如下所示:

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

有没有一种特殊的方法来设置 RestSharp 以使其识别 @attr? @(AT 符号)给我带来了问题,因为我无法创建一个与之匹配的标识符。

【问题讨论】:

    标签: c# json rest restsharp


    【解决方案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)));
    

    【讨论】:

      猜你喜欢
      • 2020-06-11
      • 2018-10-11
      • 2022-01-07
      • 2023-03-14
      • 2012-10-06
      • 2018-11-14
      • 2012-09-15
      • 2017-03-15
      • 1970-01-01
      相关资源
      最近更新 更多