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

问题描述 投票:0回答:1

我正在从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);
        }
    }
c# json .net-core json-deserialization system.io.pipelines
1个回答
0
投票
使用Utf8JsonReader类型,它包装一个序列:
© www.soinside.com 2019 - 2024. All rights reserved.