我想序列化具有自定义格式(小得多)的DataTable-每行都没有字段名。
例如,我的数据表只有2列-ID和Name。 结果Json应该是:
{
"Columns":
[
{"ID": "Int"},
{"Name": "String"},
],
"Rows":
[
["1","John Smith"],
["2","Mary Williams"]
]
}
以下格式甚至可以序列化空的数据表,并且不会在每一行上产生字段名复制。
任何建议怎么做?
答案 0 :(得分:2)
这是如何做的基础。该实现将所有内容都存储在内存中,这对于大量数据而言并不理想,但是仍然可以为您指明正确的方向。这样会打印出您希望我相信的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}");
}
}
}