我有一个数据表。当它被序列化为 JSON 时
Newtonsoft.Json.JsonConvert.SerializeObject(dataTable)
我得到以下格式的结果:
[
{
"CLICK_KEY": 6254523744,
"WEB_SERVER_KEY": 291,
"PREV_CLICK_KEY": 0,
"NEXT_CLICK_KEY": 0,
"SESSION_KEY": 214981151,
*more key value pairs*
},
{
"CLICK_KEY": 6254523745,
"WEB_SERVER_KEY": 291,
"PREV_CLICK_KEY": 0,
"NEXT_CLICK_KEY": 0,
"SESSION_KEY": 214746780
*more key value pairs*
},
*many more objects (for each row)*
]
因为我有很多列和很多行,所以生成的 JSON 是巨大的。这主要是因为列名很长并且对每一行数据都不断重复。
有没有办法更改 Json.Net 的设置,从而减小生成的 JSON 字符串的大小?例如,通过将输出格式化为:
{
"NAMES": [
"CLICK_KEY",
"WEB_SERVER_KEY",
"PREV_CLICK_KEY",
"NEXT_CLICK_KEY",
"SESSION_KEY",
*more keys*
],
"VALUES": [
[6254523744, 291, 0, 0, 214981151, *more values*],
[6254523745, 291, 0, 0, 214746780, *more values*],
*many more arrays of values (for each row)*
]
}
我不需要将其反序列化回表格或其他对象,因此“单向”解决方案将起作用。
谢谢!
更新:
我听从了@spender 和@TravisJ 的建议,并将我的DataTable
转换为另一种类型,Newtonsoft.Json.JsonConvert.SerializeObject() 输出我需要的东西。请注意我是如何从DataSet
level 开始的,因此如果它包含多个DataTable
,它将包含数组中的每个。
var converted = from x in dataSet.Tables.Cast<DataTable>()
select new
{
NAMES = x.Columns.Cast<DataColumn>().Select(l => l.Caption),
VALUES = x.Rows.Cast<DataRow>().Select(l => l.ItemArray)
};
string jsonResult = Newtonsoft.Json.JsonConvert.SerializeObject(converted);