2017-09-17 32 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