【问题标题】: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)));