【问题标题】:C# DataTable to Json (with custom format)C# DataTable to Json(自定义格式)
【发布时间】:2018-09-17 12:01:04
【问题描述】:

我想用自定义格式(小得多)序列化 DataTable - 每行没有字段名。

例如,我有只有 2 列的数据表 - ID 和名称。 生成的 Json 应该是:

{
  "Columns": 
    [
    {"ID": "Int"},
    {"Name": "String"},
    ],
  "Rows": 
    [
    ["1","John Smith"],
    ["2","Mary Williams"]    
    ]
}

以下格式甚至会序列化空数据表,并且不会在每一行上产生字段名重复。

有什么建议吗?

【问题讨论】:

标签: c# asp.net json serialization


【解决方案1】:

这里是如何做到这一点的基础知识。该实现将所有内容都放在内存中,这对于大量数据来说并不理想,但仍然应该为您指明正确的方向。我相信这会打印出你想要的 JSON。

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;

using Newtonsoft.Json;

namespace ConsoleApp1 {
    class Program {
        static void Main(string[] args) {
            var dataTable = new DataTable("test");
            dataTable.Columns.Add(new DataColumn("ID", typeof(int)));
            dataTable.Columns.Add(new DataColumn("Name", typeof(string)));

            var row1 = dataTable.NewRow();
            row1["ID"] = 1;
            row1["Name"] = "John Smith";
            dataTable.Rows.Add(row1);

            var row2 = dataTable.NewRow();
            row2["ID"] = 2;
            row2["Name"] = "Mary Williams";
            dataTable.Rows.Add(row2);

            Dictionary<string, object> result = new Dictionary<string, object> {
                ["Columns"] = dataTable.Columns.Cast<DataColumn>().Select(x => new Dictionary<string, object> { [x.ColumnName] = x.DataType.Name }).ToArray(),
                ["Rows"] = dataTable.Rows.Cast<DataRow>().Select(x => x.ItemArray).ToArray()
            };
            var json = JsonConvert.SerializeObject(result);
            Console.WriteLine($"json={json}");
        }

    }
}

【讨论】:

  • 我已编辑以在列中添加类型。希望对你有用。
猜你喜欢
  • 2017-05-02
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
相关资源
最近更新 更多