【问题标题】:How to serialize an object as JSON and write it to a pipe asynchronously in .Net Core 3.1?如何将对象序列化为 JSON 并将其异步写入 .Net Core 3.1 中的管道?
【发布时间】:2020-08-05 18:21:23
【问题描述】:

我想异步序列化一个 POCO 对象并将其写入响应体,而不需要:

  • 必须自己缓冲响应。
  • 通过 UTF-16 string

这是我现在拥有的:


            await using var w = new Utf8JsonWriter(context.Response.BodyWriter);

            JsonSerializer.Serialize(w, rpcResult, serializationOptions);

问题是JsonSerializer.Serialize 不是异步的。

JsonSerializer.SerializeAsync 似乎没有接受Utf8JsonWriter 的重载。而JsonSerializer.Serialize 可以。

我错过了什么?

【问题讨论】:

    标签: c# json asp.net-core .net-core system.text.json


    【解决方案1】:

    根据微软官方的documentation,你实际上可以用UTF8流对象调用SerializeAsync。请检查一下。

    【讨论】:

    • 是的,但是该方法写入一个PooledByteBufferWriter,它从 ArrayPool 租用一个数组并刷新到流中,context.Response.Body 流是一个 HttpResponseStream,它包装了一个 PipeWriter。当您可以直接写入管道时,为什么要这样做。有一个同步方法,但它缺少异步重载。
    • 请查看:stackoverflow.com/questions/58469794/… 了解有关异步与标准版本的更多详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2017-01-28
    • 2012-03-07
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多