2017-09-17 7 views
1

jsonファイルがあります。列挙型とクラスを別々に含むJSONファイルの読み込み方法c#

{ 
"Enumerations" : { 
     "IndianCities" : [ 
      { "key" : "Delhi", "val" : 001}, 
      { "key" : "Mumbai", "val" : 002}, 
      ], 
      . 
      . 
      }, 
"Users":[ 
{ 
     "AccessType" : "Admin", 
     "Male" : [ 
      { 
       "Name" : "Xyz", 
       "ID" : 459, 
      }, 
      { 
       "Name" : "Abc", 
       "ID" : 542, 
      } 
     ],  

     "Female" : [ 
      { 
       "Name" : "Abc", 
       "ID" : 543, 
      } 
     ] 
    }, 
{ 
     "Location" : "NewYork", 
     "Male" : [ 
      { 
       "Name" : "Xyz", 
       "ID" : 460, 
      }, 
      { 
       "Name" : "Abc", 
       "ID" : 642, 
      } 
     ],  

     "Female" : [ 
      { 
       "Name" : "Abc", 
       "ID" : 643, 
      } 
     ] 
    }, 
] 

ここでは、すべての列挙型データ(キーとバリュー情報の両方)をリストに格納したいとします。また、ユーザークラスからは、すべてのネストされたクラスのすべての男性ユーザーの情報を格納したいと思います。ここでは2つのクラス名( "Admin"と "NewYork")を書きましたが、私のjsonでは約100のクラスがあります。男性の情報をすべてのクラスで読み込み、リストに入れるための汎用ソリューションがありますか?

+1

jsonのクラスを作成する方法については、[この回答](https://stackoverflow.com/a/42708158/4228458)を参照してください。残りはまっすぐでなければなりません。 – CodingYoshi

+1

@コーディングよしベストアンサー!良い!:) –

答えて

0

Welcome to Stackoverflow!

質問を投稿しているときにエラーがないか、エラーがある場合は、エラーを修正することができるかどうかを確認してください。

あなたのJSONは有効なJSONではありません。

ステップ1

あなたのJSONを修正。

{ 
"Enumerations" : { 
     "IndianCities" : [ 
      { "key" : "Delhi", "val" : 001}, 
      { "key" : "Mumbai", "val" : 002} 
      ] 
      }, 
"Users":[ 
{ 
     "AccessType" : "Admin", 
     "Male" : [ 
      { 
       "Name" : "Xyz", 
       "ID" : 459 
      }, 
      { 
       "Name" : "Abc", 
       "ID" : 542 
      } 
     ],  

     "Female" : [ 
      { 
       "Name" : "Abc", 
       "ID" : 543 
      } 
     ] 
    }, 
{ 
     "Location" : "NewYork", 
     "Male" : [ 
      { 
       "Name" : "Xyz", 
       "ID" : 460 
      }, 
      { 
       "Name" : "Abc", 
       "ID" : 642 
      } 
     ],  

     "Female" : [ 
      { 
       "Name" : "Abc", 
       "ID" : 643 
      } 
     ] 
    } 
] 
} 

ステップ2

私は私のコメントで述べたように、あなたのJSONを表現するC#クラスを作成するためにここにanswerを参照してください:ここにあなたのJSONの修正バージョンです。私はそれをしなかった、そしてそれは、この生成された:

public class Rootobject 
{ 
    public Enumerations Enumerations { get; set; } 
    public User[] Users { get; set; } 
} 

public class Enumerations 
{ 
    public Indiancity[] IndianCities { get; set; } 
} 

public class Indiancity 
{ 
    public string key { get; set; } 
    public int val { get; set; } 
} 

public class User 
{ 
    public string AccessType { get; set; } 
    public Male[] Male { get; set; } 
    public Female[] Female { get; set; } 
    public string Location { get; set; } 
} 

public class Male 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
} 

public class Female 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
} 

ステップ3

すべてのクラスを男性の情報を読み取ることができるし、リストに入れて任意の一般的な解決策はありますが。

はい!しかし、あなたが本当に意味することは次のとおりです。

すべての男性をリストに読み込むための一般的な解決法はありますか?

Newtonsoft.Jsonライブラリを使用してJSONコンテンツを逆シリアル化します。あなたは、以下のようにデータを平らにするSelectManyを使用する必要があるので、各UserインスタンスはMale配列を持って注意してください。

Rootobject ro = JsonConvert.DeserializeObject<Rootobject>("YourJSON"); 
List<Male> males = ro.Users.SelectMany(x => x.Male).ToList(); 

必要な場合は、他のろ過を行うことができます。

+0

ありがとう@コーディングヨシ、私は次回に注意します。 –

+0

@MahendraChoudhary心配しなくても、うれしいです。 [this](https://stackoverflow.com/help/someone-answers)をお読みください。 – CodingYoshi

関連する問題