0

次の形式で JSON を返す API にアクセスしています。

{"status":1,"complete":1,"list":{"293352541":{"item_id":"293352541","fave":"0"},"247320106":{"item_id":"247320106","fave":"0"},"291842735":{"item_id":"291842735","fave":"0"} .....

私が抱えている問題は、 item_id タグの前の番号にあります。逆シリアル化するオブジェクトでこのランダムな整数を表すことができないため、逆シリアル化の試みが壊れています。

この番号は、たとえば「アイテム」という単語であると予想されるため、囲まれたオブジェクトを表すキーになりますが、この番号を持つことは、JSon のオブジェクト表現を作成できないことを意味します。

そう

public class MyClass
{
    public string status { get; set; }
    public string complete { get; set; }
    public List<MyObject> list { get; set; }
}

public class MyObject
{
    public string item_id { get; set; }
    public string fave { get; set; }
}

それから

 var items = new JavaScriptSerializer().Deserialize<MyClass>(jsontext);

逆シリアル化しますが、items.list は空です。

また、

dynamic result = JSon.Parse(jsontext);

動作しますが、良い方法で逆シリアル化したり、アイテムのリストにアクセスしたりできません。

これを行う方法はありますか?ありがとう

4

1 に答える 1

1

逆シリアル化する定義済みの型は必要ないため、json.net (nuget でも利用可能) を使用してこれを行うことができます。例えば:

var jObj = JObject.Parse(data);
var sense = jObj["list"]
    .Select(x => (JProperty)x)
    .Select(p => new { 
                   propName = p.Name,
                   itemId = p.Value["item_id"],
                   fave = p.Value["fave"]});
于 2013-02-03T14:31:33.717 に答える