2016-03-30 7 views
0

としてフォーマットJSON文字列をデシリアライズは、C#(。NET 4.6)とJSON.NETを使用して辞書

私は現在、複数のレベルの形式で提示されている大規模なJSON文字列をデシリアライズしようとしている - 私は」このデータの一部をフラットDBテーブルに格納し、C#クラスを使用して各行に書き戻す必要な形式のデータを作成することを目指しています。ここで

は(改行で構成されたデータは、可読性を高めるために追加された)文字列形式の例です:私は本当にで終わるしたい何

{ 
    "Microsoft": 
    { 
     "name" : "Microsoft", 
     "products" : ["Word", "Excel", ["TestThis","TestOrThis"]], 
     "employees" : 
     [ 
      {"John" :{"name" : "John","skills" : ["Support", "Programming"]}}, 
      {"Dave":{"name" : "Dave", "skills" : ["Tester"]}} 
     ] 
    } 
} 

この情報のほんの一部を持つデータベース行であります例えば、次のようなものを読んでください。

"Company Name", "Employee Name" 

基本的なJSON文字列を読み込み

"Microsoft", "John" 
"Microsoft", "Dave" 
"IBM", "Ted" 

は、しかし、私はこれを打破する方法について困惑私を残しているJSONを使用する新たなんだ、十分に簡単です。

+0

投稿してください有効なJson。上記は無効です。 –

+0

あなたのJsonは有効ではなく、 "products: – Wattcey

答えて

0

オンサイトjson2csharp.com JSONのgenereteクラスは、あなたの例が有効なJSONではありません。 JSONを生成されたクラスにデシリアライズします。 ツールが悪いクラスを生成することがあるので、注意してください。

+0

"の後に二重引用符がありません。 ".."を含めると、他の可能なデータ項目が示されます。私が使用している文字列は、サイズが16MBで、あなたがリンクしているサイトもそれに基づいているツールも、その量の情報を処理できません。 – Bizmark

1

私たちは、最初にこのようなクラスのカップルを定義することで、あなたのJSONをデシリアライズすることができます

class Company 
{ 
    [JsonProperty("name")] 
    public string Name { get; set; } 
    [JsonProperty("employees")] 
    public List<Dictionary<string, Employee>> Employees { get; set; } 
} 

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

その後、我々はこのようなDictionary<string, Company>にデシリアライズすることができます:あなたはどこに気づくでしょう

var companies = JsonConvert.DeserializeObject<Dictionary<string, Company>>(json); 

キーはJSON(会社名や社員名など)によって異なる場合がありますが、静的クラスの代わりに辞書を使用する必要があります。また、製品やスキルなど興味のないアイテムのプロパティを定義することを省略することもできます。

我々は非直列化された企業を持っていたら、我々は結果をループこのような所望の出力に到達することができます:

foreach(KeyValuePair<string, Company> kvp in companies) 
{ 
    foreach (Dictionary<string, Employee> employees in kvp.Value.Employees) 
    { 
     foreach (KeyValuePair<string, Employee> kvp2 in employees) 
     { 
      Console.WriteLine(kvp.Value.Name + ", " + kvp2.Value.Name); 
     } 
    } 
} 

出力:

Microsoft, John 
Microsoft, Dave 

はフィドル:https://dotnetfiddle.net/FpK7AN

関連する問題