为什么System.Text.Json无法序列化MemoryStream?

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

我有一个具有

MemoryStream
属性的类。当我尝试使用
System.Text.Json
序列化它时,出现异常:

“System.InvalidOperationException”类型的未处理异常 发生在 System.Private.CoreLib.dll 中:“不支持超时” 这个流。'

using System.Text;
using System.Text.Json;

using var memoryStream = new MemoryStream();
var sampleText = "Hello, MemoryStream!";
var byteArray = Encoding.UTF8.GetBytes(sampleText);
memoryStream.Write(byteArray, 0, byteArray.Length);

var testClass = new TestClass
{
    Stream = memoryStream
};
var json = JsonSerializer.Serialize(testClass);

public class TestClass
{
    public MemoryStream Stream { get; set; }
}

如何解决这个问题?

c# .net serialization memorystream system.text.json
1个回答
0
投票

出现此错误的原因是尝试读取

ReadTimeout
WriteTimeout
(在基类
System.IO.Stream
中实现)会引发此异常(请参阅此处)。序列化器尝试读取所有属性,因此失败。

您需要提供手动序列化,因为 Streams 并不打算直接序列化。

Stream
继承自
MarshalByRefObject
,强烈表明该类型不适合序列化,而应使用按引用语义。

© www.soinside.com 2019 - 2024. All rights reserved.