如何使用 Utf8JsonWriter 编写字符串数组?

Zin*_*tom 3 .net c# serialization json system.text.json

我正在做一些测试,并且想使用而Utf8JsonWriter不是JsonSerializer.

我有以下代码:

writer.WriteStartObject();
writer.WriteStartObject("InformationObject");
writer.WriteString("Name", "Info Name");
writer.WriteString("Details", "Info Details");
writer.WriteStartArray("Tags");
Run Code Online (Sandbox Code Playgroud)

Tags数组属性中,我想编写一个字符串数组,但是如果我尝试WriteString在调用后使用 或任何其他方法WriteStartArray,代码将在运行时失败。

没有“WriteArrayContents”方法或类似的方法,所以我很好奇您要在WriteStartArray实际写入数组内容之后调用什么方法?

我只是误解了 JSON 的工作方式还是我在 MS API 中遗漏了一些东西?

dbc*_*dbc 9

您需要调用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();
}
Run Code Online (Sandbox Code Playgroud)

演示小提琴在这里