问题描述
在dotnet3.1中,使用System.Text.Json
如何将C#对象异步序列化为utf8jsonwriter? 我找到了Serialize()方法,但没有找到Async版本,并且正在写流,因此出现错误: 如果我使用sync Serialize(),则“复制到流时出错...不允许同步操作...。”
我的代码很简单:
Stream responseStream;
var jsonWriter = new Utf8JsonWriter(responseStream);
await JsonSerializer.SerializeAsync(jsonWriter,obj);
其中obj是类实例DTO。
我看到接收到一个Stream的重载,但是我需要使用Utf8JsonWriter jsonWriter来编写,它包装了目标流。
解决方法
正如他们所提到的,它们已经是两个记录的异步序列化流方法。尽管如果您的JSON序列化程序正在同步写入响应主体,那么您必须启用SynchronousIO。
红est(Program.cs类):
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureKestrel((context,options) =>
{
options.AllowSynchronousIO = true;
})
IIS(Startup.cs类):
services.Configure<IISServerOptions>(options =>
{
options.AllowSynchronousIO = true;
});