【问题标题】:Is there any way to obtain following json result?有没有办法获得以下json结果?
【发布时间】:2014-09-30 04:40:11
【问题描述】:

我有一个数据表

班级名称 学科科目

 I          A         English

 I          A         Maths

 I          B         English

 II         A         English

我需要输出为

[  
   {  
      "className":I,
      Division:[  
         {  
            name:A,
            subject:[  
               {  
                  name:english
               },
               {  
                  name:maths
               }
            ]
         },
         {  
            name:B,
            subject:[  
               {  
                  name:English
               }
            ]
         }
      ]
   },
   {  
      "ClassName":II,
      Division:[  
         {  
            name:A,
            subject:[  
               {  
                  name:english
               }
            ]
         }
      ]
   }
]

【问题讨论】:

  • 这是一个关系数据库吗?
  • 不,它不是关系数据库
  • 您尝试从文件中提取此数据,然后将其打印为 json?
  • 数据是从一些表中加入的
  • 请考虑为您的问题添加更多细节,这非常模糊且难以回答。

标签: c# asp.net-mvc json json.net


【解决方案1】:

假设您以 DataTable 开头,如下所示:

DataTable table = new DataTable();
table.Columns.Add("className");
table.Columns.Add("Division");
table.Columns.Add("Subject");
table.Rows.Add("I", "A", "English");
table.Rows.Add("I", "A", "Maths");
table.Rows.Add("I", "B", "English");
table.Rows.Add("II", "A", "English");

你可以像这样得到你想要的输出:

List<DataRow> rows = new List<DataRow>();
foreach (DataRow row in table.Rows)
    rows.Add(row);

var result = rows.GroupBy(r => r["className"])
                 .Select(g => new
                 {
                     className = g.Key,
                     division = g.GroupBy(r => r["Division"])
                                 .Select(g1 => new
                                 {
                                     name = g1.Key,
                                     subject = g1.Select(r => new
                                                 {
                                                     name = r["Subject"]
                                                 })
                                 })
                 });

string json = JsonConvert.SerializeObject(result, Formatting.Indented);
Console.WriteLine(json);

工作演示https://dotnetfiddle.net/67mjiu

【讨论】:

    【解决方案2】:

    你有两个选择:

    1. 手动创建 JSON(使用 StringBuilder 或 JSON.NET 内置对象类型)

    2. 创建看起来像所需结构的 DTO(数据传输对象),用数据填充它们,然后对其进行序列化。

    DTO:

    public class Clazz
    {
        public string className { get; set; }
        public Division[] Division { get; set; }
    }
    
    public class Division
    {
        public string name { get; set; }
        public Subject[] subject { get; set; }
    }
    
    public class Subject
    {
        public string name { get; set; }
    }
    

    您的 JSON 无效。所有名称和字符串值都必须用引号转义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多