私はデータテーブルを持っています。で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文字列のサイズが小さくなるようにJson.Netの設定を変更する方法はありますか? たとえば、出力を次のようにフォーマットします。
{
"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() が出力する別の型に変換しました。level から開始する方法に注意してください。DataSet
複数の が含まれている場合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);