2017-04-24 12 views
-1

C#とVisual Studioの新機能で、私と一緒にいてください。DataGridViewに複雑なJSONを表示

DataGridViewを使用してJSONを表示および編集するプログラムを作成したいとします。アプリケーションは、WebからいくつかのJSONをダウンロードして(その部分を持っている)、アプリケーションで簡単に編集できるように表示します。編集が終了すると、サーバーにアップロードされます。問題は、JSONが表示される部分(おそらく重要な部分)に固執しているということです。

私はDataGridViewを使用して表示する必要があることを知りました。少なくとも、私はいくつかの検索から得た印象です。JSONをダウンロードして逆シリアル化することができました。 NET)にいくつかの単純なリストと辞書を使用しています。 JSONを非直列化してクラスに変換できるようにしたいので、より簡単にナビゲートすることができますが、ネストされた辞書や配列を使用することは非常に困難です。ここにサンプルがあります(実際のファイルは少し長くなっていますが、私はそれをカットして要点を得ています)。

{ 
    "regular" : [ 
    [ 
     { 
     "description" : "Free E-Booklet", 
     "information" : "http://freeebooknotascam.com", 
     "contentType" : "banner", 
     "message" : "Free E-Booklet (NOT A SCAM!)", 
     "color" : "#811cca" 
     } 
    ], 
    [ 
     { 
     "description" : "Free Money!", 
     "information" : "http://freemoney.com", 
     "title" : "", 
     "contentType" : "web", 
     "thumbnail" : "http://freemoney.com/money" 
     } 
    ] 
    ], 
    "special" : [ 
    { 
     "description" : "Hats", 
     "information" : "", 
     "title" : "", 
     "contentType" : "web", 
     "thumbnail" : "http://hats.com/mlady" 
    }, 
    { 
     "description" : "Signup", 
     "information" : "", 
     "title" : "", 
     "contentType" : "web", 
     "thumbnail" : "http://google.com/signup/thumbnail.png" 
    } 
    ] 
} 

が表示されたら、私はネストされたリストや辞書を持つ単純なクラスを試してみたが、JSON.NETは、それをデシリアライズし、DataGridViewの中にそれを表示する必要はありません。

これは現在デシリアライズに使用していますが、動作しますが、DataGridViewに表示されません(カウントが表示され、上下に移動できません)。 JsonConvert.DeserializeObject<Result>(json);結果はこれだけです。

public class Result 
{ 
    public List<Dictionary<String, String>> featured; 
    public List<List<Dictionary<String, String>>> regular; 
} 

一つのビューでは、私は、例えばregular辞書あちこちアイテムのdescriptionタグを一覧表示したいです

- Regular 
    - Row One 
    - Free E-Booklet 
    - Row Two 
    - Free Money 

やその他では、私がJavaScriptSerializerを使用し、それは問題ではありませんspecial辞書

- Special 
    - Hats 
    - Signup 
+1

あなたは 'DataGridView'で表示するように何を期待していますか?それはあなたのためにリストを示すことができるので、結果をLINQを使って適切なリストに形作る必要があります。 –

+0

@Reza Aghaei私はキー/値の残りの部分にドロップすることができる単純なリストを表示したいと思いますが、今リストの辞書の配列を取得し、リスト内の説明キーの表示をokにするだけです。 –

+1

質問に希望する出力の例を含める方が良いでしょう。また、すべての要素が同じキーを持つので、 'Dictionary の代わりにクラスを作成することができます。 –

答えて

1

を一覧表示します。

辞書のキーは、私が示唆しているように、事前に異なっていて不明なので、DataTableを使用してください。動的に列を作成することができます。

正規または特別な行が属するセットを示すために、ブール値の列を追加しました。代わりに、2つの異なるDataGridViewを使用することができます。

結果:

enter image description here

+0

に追加しました。完璧に動作します。これを読んでいる人は、 'JavaScriptSerializer'と' SelectMany'がそれぞれ機能するために 'using System.Web.Script.Serialization;'と 'using System.Linq;'を追加する必要があります。 –

関連する問題