如何序列化一个类的 Stream(或更准确地说是 Stream 派生的)数据成员?
假设我们有一个无法归因的 3rd Party 类:
public class Fubar
{
public Fubar() { ... }
public string Label { get; set; }
public int DataType { get; set; }
public Stream Data { get; set; } // Where it's always actually MemoryStream
};
我正在尝试使用 protobuf-net 来序列化该类。处理我提出的异常和各种 SO 问题:
RuntimeTypeModel.Default.Add(typeof(Stream), true)
.AddSubType(1, typeof(MemoryStream));
RuntimeTypeModel.Default.Add(typeof(Fubar), false)
.Add(1, "Label")
.Add(2, "DataType")
.Add(3, "Data");
using (MemoryStream ms = new MemoryStream())
{
Fubar f1 = new Fubar();
/* f1 initialized */
// Serialize f1
Serializer.SerializeWithLengthPrefix<Message>(ms, f1, PrefixStyle.Base128);
// Now let's de-serialize
ms.Position = 0;
Fubar f2 = Serializer.DeserializeWithLengthPrefix<Fubar>(ms, PrefixStyle.Base128);
}
以上运行没有错误。标签和数据类型在 f2 中是正确的,但数据变量只是一个空流。调试代码我看到内存流大约是 29 个字节(而 f1 本身的数据流超过 77KiB)。
我觉得好像我错过了一些相当微不足道的东西,但似乎无法弄清楚它会是什么。我假设确实可以序列化流数据成员。我是否还必须以某种方式指定 Stream 或 MemoryStream 类型的数据属性?