2017-08-03 37 views
0

私はC#プログラムをリストとしてロードし、最終的にはDataGridViewに表示したい製品の配列を持つJSONを持っています。JSON配列からDataGridViewを読み込む

JSON:

{ 
    "products":[ 
     { 
     "name":"game", 
     "url":"website 1", 
     "cash_price":"£20.00", 
     "category":"Playstation 4 Game" 
     }, 
     { 
     "name":"tv", 
     "url":"website 2", 
     "cash_price":"£200.00", 
     "category":"electronics" 
     } 
    ] 
} 

Productクラス

class Product 
    { 

     [JsonProperty("name")] 
     public string name { get; set; } 

     [JsonProperty("url")] 
     public string url { get; set; } 

     [JsonProperty("cash_price")] 
     public string cash_price { get; set; } 

     [JsonProperty("category")] 
     public string category { get; set; } 

     [JsonProperty("url")] 
     public string url { get; set; } 

     public static IList<Product> products = new List<Product>(); 
    } 

私はこのコードを実行します。

string input = File.ReadAllText(openFileDialog1.FileName); 

var results = JsonConvert.DeserializeObject(input); 
dataGridView1.DataSource = Product.products; 

をしかし、DataGridViewの中で、私が示されてる全てがブランクグリッドですヘッダーの名前、URL、cash_priceとカテゴリ。グリッド内に実際のエントリはありません。

私は間違っていますか?

JsonConvert.DeserializeObject<Product>のようにデシリアライズするとき

+0

画像へのリンクを投稿しないでください。空のグリッドが表示されるようにしてください。また、これをWinFormsの質問としてタグ付けしてください。 – dnickless

+0

@dnickless Ahhごめんなさい、すべて更新されました –

+0

DataSourceを設定する前に、何かに 'Product.products'プロパティを設定しているように見えません。 JsonConvertはその静的プロパティを設定しません –

答えて

0

は、製品の種類を提供していただきありがとうございます。あなたの例の場合のように -

class ProductList 
{ 
    public List<Product> products { get; set; } 
} 

var result = JsonConvert.DeserializeObject<ProductList>(input); 
dataGridView1.DataSource = result.products; 

おそらくプロパティ名は正確にJSONの名前と一致するJsonPropertyAttribute Sをスキップすることができます。

+0

すばやく応答いただきありがとうございます。しかし、私はこれをやろうとしました(クラスの追加など)、データグリッドビューは完全に空白になりました。ヘッダーはもう表示されず、空白の灰色のボックスになります。私はおそらくどこかで愚かな間違いをしていることは知っていますが、これで2時間ぐらい過ごしていて、何をやるべきか分かりません。 –

+0

私は 'List products {get;セット; } 'public。サンプルコードが更新され、今回はテストされました:) – Laoujin

+0

うーん、私のコードは更新されましたが、まだ何も表示できず、理由が分かりません。 ? –

関連する問題