web-dev-qa-db-ja.com

.netコアでjsonデータセットを逆シリアル化するにはどうすればよいですか

私は、jsonを返すapiからさまざまなアイテムをフェッチしようとしています。私が持っている問題は、jsonからプロパティを取得することです。これは、常に同じ名前であるとは限らないためです。以前にjsonファイルをデシリアライズしたことがありますが、それらはこれとは異なりました。ここに私が持っているjsonがあります:

{"2": {"name": "Cannonball", "store": 5}, "6": {"name": "Cannon base", "store": 187500}, "12289": {"name": "Mithril platelegs (t)", "store": 2600}, "8": {"name": "Cannon stand", "store": 187500}, "10": {"name": "Cannon barrels", "store": 187500}, "12": {"name": "Cannon furnace", "store": 187500}}

実際にはこれより少し大きいですが、簡単にデシリアライズする方法がわかりません。idに実際の名前がないため、newtonsoft.jsonのドキュメントで、データセットの使用について何かを見ましたが、私はしません。それが実際に機能するかどうかを確認しますが、削除されているのを確認しました。これはかなり長い間私を悩ませてきたので、私は本当にこれを機能させたいと思っています。

これを行う方法を知っている人がいたら、どんな助けでも大歓迎です。

6
jasont20015

この状況を処理するには、Dictionary<string, T>に逆シリアル化します。ここで、Tは、アイテムデータを保持するクラスです。次に例を示します。

public class Item
{
    public string Name { get; set; }
    public int Store { get; set; }
}

このようにデシリアライズします:

var dict = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);

フィドル: https://dotnetfiddle.net/hf1NPP

14
Brian Rogers