Как написать массив строк с помощью Utf8JsonWriter? - PullRequest
0 голосов
/ 27 мая 2020

Я провожу несколько тестов и хочу вручную записать объект JSON в файл, используя Utf8JsonWriter, а не JsonSerializer.

У меня следующий код:

writer.WriteStartObject();
writer.WriteStartObject("InformationObject");
writer.WriteString("Name", "Info Name");
writer.WriteString("Details", "Info Details");
writer.WriteStartArray("Tags");

В свойстве массива Tags я хотел бы написать массив строк, однако, если я попытаюсь использовать WriteString или любой другой метод после вызова WriteStartArray, код завершится ошибкой во время выполнения.

Нет метода «WriteArrayContents» или чего-то подобного, поэтому мне любопытно, какой метод вы должны вызывать после WriteStartArray, чтобы на самом деле записать содержимое массива?

Я просто неправильно понимаю способ JSON работает или что-то я пропустил с MS API?

1 Ответ

3 голосов
/ 27 мая 2020

Вам нужно вызвать WriteStringValue(), чтобы записать строковое значение в массив:

Записывает строковое текстовое значение (как JSON строка) как элемент массива JSON .

И, в более общем плане, вам необходимо использовать один из методов Write*Value() из Utf8JsonWriter (например, как WriteBooleanValue() или WriteNumberValue()), чтобы записать элемент массива соответствующего типа.

Таким образом, ваш Write() метод должен выглядеть так:

public override void Write(Utf8JsonWriter writer, InformationObject value, JsonSerializerOptions options)
{
    writer.WriteStartObject();
    writer.WriteStartObject("InformationObject");
    writer.WriteString("Name", "Info Name");
    writer.WriteString("Details", "Info Details");
    writer.WriteStartArray("Tags");     

    // Write some dummy values here
    writer.WriteStringValue("value1");
    writer.WriteStringValue("value2");

    writer.WriteEndArray();
    writer.WriteEndObject();
    writer.WriteEndObject();
}

Демо скрипка здесь .

...