gpt4 book ai didi

c# - System.Text.Json:从 System.IO.Pipelines 反序列化

转载 作者:行者123 更新时间:2023-11-30 22:52:04 25 4
gpt4 key购买 nike

我正在使用来自 TcpClient 的 Json,为了获得低分配和良好性能的解决方案,我决定使用新的 System.IO.Pipelines用于处理 IO 和 System.Text.Json用于反序列化。管道的输出是 ReadOnlySequence<byte> .当 ReadOnlySequence 中只有一个段时我没问题,这样我就可以将这个段(这是一个 ReadOnlySpan<byte> )传递给解串器。但是我应该如何处理多个段?

到目前为止,我所拥有的是下面的代码。但在某些情况下,序列的长度太大,所以我在 stackalloc 中出现堆栈溢出。 .此外,在我看来,复制数据似乎违反了 System.IO.Pipelines 的意图。不应该System.Text.Json.JsonSerializer.Deserialize有一个ReadOnlySequence重载?关于如何解决这个问题有什么建议吗?

private void ProcessLine(ReadOnlySequence<byte> sequence)
{
if (sequence.IsSingleSegment)
{
_result = JsonSerializer.Deserialize<MyType>(sequence.FirstSpan, _jsonSerializerOptions);
}
else
{
Span<byte> stackSpan = stackalloc byte[(int)sequence.Length];
sequence.CopyTo(stackSpan);
_result = JsonSerializer.Deserialize<MyType>(stackSpan, _jsonSerializerOptions);
}
}

最佳答案

使用Utf8JsonReader类型,包装一个序列(注意:它也可以包装一个span等),让它处理单/多/等段问题:

private void ProcessLine(ReadOnlySequence<byte> sequence)
{
var reader = new Utf8JsonReader(sequence);
_result = JsonSerializer.Deserialize<MyType>(ref reader);
}

关于c# - System.Text.Json:从 System.IO.Pipelines 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58537669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com