2017-09-17 31 views
1

我有一個json文件。如何閱讀包含枚舉和類分別使用c#的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, 
      } 
     ] 
    }, 
] 

在這裏,我想存儲列表中的所有枚舉數據(鍵和val信息)。同樣來自用戶類,我想存儲來自所有嵌套類的所有男性用戶的信息。在這裏,我寫了兩個類名(「Admin」和「NewYork」),但在我的json中,我有大約100個類。是否有任何通用解決方案可用於閱讀男性信息的所有課程並列入清單。

+1

請參考[本答案](https://stackoverflow.com/a/42708158/4228458)瞭解如何爲您的json創建類。其餘的應該是直截了當的。 – CodingYoshi

+1

@CodingYoshi最佳答案!好!:) –

回答

0

歡迎來到Stackoverflow!

未來,請確定您是否在問一個問題,您發佈的代碼沒有錯誤,或者如果確實有錯誤,那麼您的問題可能是關於修復錯誤。

您的JSON無效JSON。

步驟1

修正你的JSON。這是你的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

正如我在我的評論中提到,請參考answer這裏創建C#類來表示你的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內容。請注意,每個User實例都有一個Male陣列,所以你需要使用SelectMany扁平化數據如下圖所示:

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

,如果你需要你可以做其他的過濾。

+0

謝謝@CodingYoshi,下次我會照顧的。 –

+0

@MahendraChoudhary不用擔心,很高興我能幫上忙。請閱讀[this](https://stackoverflow.com/help/someone-answers)。 – CodingYoshi