有什么方法可以获得下面的json结果吗

本文关键字:json 结果 方法 什么 | 更新日期: 2023-09-27 18:25:05

我有一个数据表

分类科目

 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结果吗

假设您从这样的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

您有两个选项:

  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无效。所有名称和字符串值都必须用引号转义。