我有一个具有
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; }
}
如何解决这个问题?
出现此错误的原因是尝试读取
ReadTimeout
或 WriteTimeout
(在基类 System.IO.Stream
中实现)会引发此异常(请参阅此处)。序列化器尝试读取所有属性,因此失败。
您需要提供手动序列化,因为 Streams 并不打算直接序列化。
Stream
继承自 MarshalByRefObject
,强烈表明该类型不适合序列化,而应使用按引用语义。