2016-10-02 6 views
5

をデシリアライズ私は難しそうのようなデータを返す要求を取得するJSONから返されたデータを表現するための適切な注釈を書いて過ごしています:無名の配列

[{"ProductCode":"0129923083091","Description":"DIESEL ","SalesLitres":6058.7347,"SalesValue":6416.2000},{"ProductCode":"0134039344902","Description":"UNLEADED ","SalesLitres":3489.8111,"SalesValue":3695.7100}, 
... 
] 

(ちょうど私が可変数を持っている可能性があることを示す上記の省略記号をこれらの項目の(私はXamarinのプロジェクトのためにMVVMのアプローチを使用していますが、それはここでは関係の上にはありません)私はモデルが

namespace App8.Models 
    { 

     public class ReportRow 
     { 
      [JsonProperty("ProductCode")] 
      public string ProductCode { get; set; } = string.Empty; 

      [JsonProperty("Description")] 
      public string Description { get; set; } = string.Empty; 

      [JsonProperty("SalesLitres")] 
      public double SalesLitres { get; set; } = 0.0; 

      [JsonProperty("SalesValue")] 
      public double SalesValue { get; set; } = 0.0;  
     } 
    } 
属性表現するために、アノテーションを使用しています私のモデルクラスでは)

を返さ210

コンテナ/包含関係を示す別のクラスを説明したいと思います。しかし、返されたコレクションの「ルート」を表すアノテーションにJSON属性が存在しないので、私は立ち往生します。

返されたJSON内で名前が付けられたJSON配列のオブジェクトモデルにJSONをマッピングするのに問題はありません。その場合、C#Listを含む名前付きJSON属性を持つ別のクラスを作成できますが、名前のない配列内の項目のリストを返すJSONの適切なモデルマッピングを提供しようとしています。

私はこれにどのようにアプローチできますか?

JsonConvert.DeserializeObject<List<ReportRow>>(json) 

(またはあなたが望む任意の変異体、ここでの鍵はReportRowICollectionをデシリアライズするために求めていることがICollectionを実装する独自のクラスであるか、またはのいずれかの可能性:JSONは、使用することをデシリアライズするために

+1

よく作成された最初の質問をお祝いします! – Kroltan

答えて

4

同じ考え方は、JsonTextReaderまたはJSON.NETのデシリアライズを行う他の方法に従います。ターゲットタイプとしてICollection<YourType>を使用してください。

+0

ありがとうKroltan。私は正しくそれをやっているように見えます、それは私がそれを脱直列化しようとしているものです。私の問題は、Xamarinのフォームの中でスタックをさらに上回り、viewmodel内でそのリストにバインドする方法などです。JSONをデシリアライズする正しい方法を使用していることの検証には少なくとも役立ちます。 – retail3r

+0

@ user6911358これは通常、ルート配列を逆シリアル化する正しい方法です。独自の型が本当に必要な場合(カスタムインタフェースを実装する場合など)、 'List '型やその他のコレクションをサブクラス化することができます。本当に必要な場合は、独自のものを実装してください。しかし、おそらくそうはならない。 Xamarinの疑問に別の質問を投稿し、ここにリンクしてください。 – Kroltan