2016-05-26 2 views
3

私はこのJSONを持っていると私はC#でオブジェクトのリストに変換する方法を見つけ出すことはできません。JsonConvertでこのJSONをどのように非直列化できますか?

{ 
    "2": { 
    "sell_average": 239, 
    "buy_average": 238, 
    "overall_average": 240, 
    "id": 2 
    }, 
    "6": { 
    "sell_average": 184434, 
    "buy_average": 182151, 
    "overall_average": 189000, 
    "id": 6 
    }, 
    "8": { 
    "sell_average": 11201, 
    "buy_average": 1723, 
    "overall_average": 180, 
    "id": 8 
    } 
} 

そして、私が使用して試したコード:

public class ItemSummaryModel 
{ 
    public string Id { get; set; } 
    public ItemSummary ItemSummary { get; set; } 
} 

public class ItemSummary 
{ 
    public int Sell_Average { get; set; } 
    public int Buy_Average { get; set; } 
    public int Overall_Average { get; set; } 
    public int Id { get; set; } 
} 

List<ItemSummaryModel> models = 
    JsonConvert.DeserializeObject<List<ItemSummaryModel>>(jsonSummary); 

無駄にここ

はJSONです。このJSONを、NewtonsoftのJSONライブラリ(Json.Net)を使用してこれらのオブジェクトのリストにデシリアライズするにはどうすればよいですか?

+2

物事のカップルを使用することができます:あなたがリストにデシリアライズしようとしているが、リストを表すものではありませんあなたのJSONは、それがプロパティを持つだけ複雑なオブジェクトです。第2に、ドメインオブジェクトのプロパティ名がJSONプロパティ名と一致しないため、C#の多くはJSONの正確な名前を指定する属性で修飾する必要があります。最後に、「2」、「6」、「8」である「ID」の、現時点ではので、あなたのJSONの構造は、C#の構造と等価ではないことを示していることは何もありません。 –

答えて

2

あなたは検討する

var dict = JsonConvert.DeserializeObject<Dictionary<int, ItemSummary>>(json); 
var items = dict.Values.ToList(); //if you want a List<ItemSummary>; 
+0

JSON文字列内の文字列のid例えば「2」は –

+1

@VuDang信託私をint型に変換できないため、JSON.NETは予想以上に賢いです。 –

+1

それは...本当にエレガントです。それは大好きです。 JSON.NETは感銘を与えることは決してありません。 –

0
public class ItemSummaryModel 
{ 
    [JsonProperty(PropertyName = "2")] 
    public ItemSummary Two { get; set; } 
    [JsonProperty(PropertyName = "6")] 
    public ItemSummary Six { get; set; } 
    [JsonProperty(PropertyName = "8")] 
    public ItemSummary Eight { get; set; } 
} 

var result = JsonConvert.DeserializeObject<ItemSummaryModel>(json); 

これは技術的には複雑なオブジェクトを取得するのに役立ちますが、あまり好きではありません。プロパティ名の番号を持つことが問題になります。これは単一の複雑なオブジェクトのjsonであることも難しいでしょう。それは代わりにリストした場合は、idフィールドとあなたが望むものは何でもプロパティに実際のオブジェクトに数のプロパティ名をマッピング処理するために、独自のContractResolverを書き始めることができます。

+0

ご協力いただきありがとうございます。この問題の唯一の問題は、合計約4万のオブジェクトがあることです。 JSONを受け取った後にJSONをリストに変換する方が簡単だと思いますか?私は出力されているJSONを制御できません。辞書<文字列、ItemSummary>を使用して – Anthony

関連する問題