У меня есть DataTable. Когда это сериализовать в формате JSON сФорматирование вывода Newtonsoft.Json.JsonConvert.SerializeObject (dataSet)
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)*
]
}
мне не нужно десериализовать это обратно в таблицу или другой объект, поэтому решение «односторонний» будет работать.
Спасибо!
Update:
Я последовал совету от @spender & @TravisJ и трансформировали мой DataTable
в другой тип, для которого Newtonsoft.Json.JsonConvert.SerializeObject() выводит то, что мне нужно. Обратите внимание, как я начинаю с уровня 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);
Почему вы хотите форматировать? Вы используете JSON для передачи данных, которые не представлены. –
@Ash - Пожалуйста, прочитайте вопрос. Мне нужно уменьшить размер получаемого объекта JSON. – IMK
Почему бы не преобразовать данные в эту форму до сериализации? Похож на объект с 'IEnumerable' и 'IEnumerable >'? Аналогично, вы можете распаковать его на другом конце. –
spender