В System.Text.Json можно минимизировать только элементы массива?C#

Место общения программистов C#
Ответить
Anonymous
 В System.Text.Json можно минимизировать только элементы массива?

Сообщение Anonymous »

Можно ли с помощью System.Text.Json сериализовать массив так, чтобы каждый элемент массива появлялся в новой строке, но каждая строка была минимизирована? Вот мое консольное приложение, пытающееся использовать Utf8JsonWriter для записи каждого элемента массива.

Код: Выделить всё

using System.Dynamic;
using System.Text.Json;

namespace JsonArraySerialisationTest
{
internal class Program
{
static void Main()
{
// create test items to be serialised
const int itemCount = 2;
List items = new List();
for (int i = 0; i < itemCount; ++i)
{
dynamic item = new ExpandoObject();
item.prop1 = i;
item.prop2 = (char)('a' + i);
items.Add(item);
}

string outputJson;
using (MemoryStream outputStream = new MemoryStream())
{
JsonWriterOptions writeArrayOptions = new JsonWriterOptions()
{
Indented = true,
};

JsonSerializerOptions writeItemOptions = new JsonSerializerOptions()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = false,
};

// write items
using (Utf8JsonWriter jw = new Utf8JsonWriter(outputStream, writeArrayOptions))
{
jw.WriteStartArray();
foreach (ExpandoObject item in items)
{
JsonSerializer.Serialize(jw, item, writeItemOptions);
}
jw.WriteEndArray();
}

// read json string
outputStream.Position = 0;
using (StreamReader sr = new StreamReader(outputStream, leaveOpen: true))
{
outputJson = sr.ReadToEnd();
}
}

Console.WriteLine(outputJson);
}
}
}
Вывод:

Код: Выделить всё

[
{
"prop1": 0,
"prop2": "a"
},
{
"prop1": 1,
"prop2": "b"
}
]
Если я заменю JsonSerializer.Serialize(jw, item, writeItemOptions); на jw.WriteRawValue(JsonSerializer.Serialize(item, writeItemOptions), true); тогда результат будет

Код: Выделить всё

[{"prop1":0,"prop2":"a"},{"prop1":1,"prop2":"b"}
]
Мне нужен результат:

Код: Выделить всё

[
{"prop1":0,"prop2":"a"},
{"prop1":1,"prop2":"b"}
]
Сценарий использования заключается в том, что мой файл JSON содержит массив с тысячами элементов, и каждый элемент будет проходить через длительный процесс. Если процессор сообщает, что элемент 50 вызвал ошибку, я хотел бы иметь возможность вручную отредактировать файл JSON, чтобы удалить все элементы массива, кроме элемента 50, и отладить этот единственный элемент. Если каждый элемент массива находится на отдельной строке, ненужные строки/элементы можно легко удалить.

Подробнее здесь: https://stackoverflow.com/questions/785 ... rray-items
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»