次のような Last.fm からの JSON があります。
{
"toptags":{
"@attr":{
"artist":"Whatever",
"album":"Whatever"
}
}
}
@attrを認識させるために RestSharp をセットアップする特別な方法はありますか? @ (AT 記号) は、これに一致する識別子を作成できないため、問題を引き起こしています。
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)));