【问题标题】:How to write a string array with a Utf8JsonWriter?如何使用 Utf8JsonWriter 编写字符串数组?
【发布时间】:2020-05-27 15:50:56
【问题描述】:

我正在做一些测试,并希望使用 Utf8JsonWriter 而不是 JsonSerializer 手动将 JSON 对象写入文件。

我有以下代码:

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

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

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

我只是误解了 JSON 的工作方式,还是我在 MS API 中遗漏了什么?

【问题讨论】:

    标签: c# .net json serialization system.text.json


    【解决方案1】:

    您需要调用WriteStringValue() 将字符串值写入数组:

    写入字符串文本值(作为 JSON 字符串)作为 JSON 数组的元素

    而且,更一般地,您需要使用Write*Value() methods of 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();
    }
    

    演示小提琴here.

    【讨论】:

    • 你的小提琴从不使用 Write 方法
    • 小提琴将转换器添加到JsonSerializerOptions.Converters,然后序列化对象,这会导致转换器的Write()方法被调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2021-05-24
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    相关资源
    最近更新 更多