有没有办法获得以下json结果?

时间:2014-09-30 04:40:11

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

我有一个数据表

classname Division Subject

 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
               }
            ]
         }
      ]
   }
]

2 个答案:

答案 0 :(得分:2)

假设你开始使用这样的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 :(得分:0)

您有两种选择:

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

  2. 创建看似所需结构的DTO(数据传输对象),用数据填充它们,然后将它们序列化。

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