RestSharp JsonDeserializer,标识符中包含特殊字符
我有一些来自Last.fm的JSON,如下所示:
{ "toptags":{ "@attr":{ "artist":"Whatever", "album":"Whatever" } } }
是否有一种特殊的方法来设置RestSharp以使其识别@attr ? @(AT符号)导致我出现问题,因为我无法创建与此匹配的标识符。
从查看RestSharp源可以使它能够进行数据协定反序列化,这似乎需要更改RestSharp源。
在SimpleJson.cs中搜索//#define SIMPLE_JSON_DATACONTRACT
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)));