RestSharp JsonDeserializer со специальными символами в идентификаторах

У меня есть некоторый JSON, исходящий от Last.fm, например:

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

Есть ли особый способ настроить RestSharp, чтобы он распознавал @attr? Знак @ (знак AT) вызывает у меня проблемы, потому что я не могу создать идентификатор, который будет соответствовать этому.


person programmer    schedule 24.11.2012    source источник


Ответы (1)


Глядя на источник RestSharp, можно разрешить ему выполнять десериализацию контракта данных, для этого, похоже, требуется изменение источника RestSharp.

Найдите //#define SIMPLE_JSON_DATACONTRACT в SimpleJson.cs

Затем вам также потребуется создать контракты данных (см. "@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)));
person Tommy Grovnes    schedule 14.06.2013