3

次のような Last.fm からの JSON があります。

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

@attrを認識させるために RestSharp をセットアップする特別な方法はありますか? @ (AT 記号) は、これに一致する識別子を作成できないため、問題を引き起こしています。

4

1 に答える 1

1

RestSharp ソースを見ると、データ コントラクトの逆シリアル化を有効にすることができます。これには、RestSharp ソースの変更が必要なようです。

//#define SIMPLE_JSON_DATACONTRACTSimpleJson.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)));
于 2013-06-14T13:19:18.400 に答える