2012-11-24 65 views
3

我有一些JSON從Last.fm未來類似這樣的特殊字符:RestSharp JsonDeserializer與標識符

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

是否有設置RestSharp一種特殊的方式得到它承認@attr? @(AT標誌)引起我的問​​題,因爲我無法創建一個與此匹配的標識符。

回答

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)));