Protobuf-net: Сериализация стороннего класса с элементом данных Stream
Как вы сериализуете элемент данных Stream (или, более правильно, Stream) класса?
Предполагая, что у нас есть сторонний класс, который мы не можем приписать:
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);
}
Вышеописанное работает без ошибок. Метка и DataType правильны в f2, но переменная Data - это просто пустой поток. Отладка кода Я вижу, что поток памяти составляет что-то вроде 29 байтов (в то время как поток данных в самой f1 превышает 77 КБ).
Я чувствую, как будто я скучаю по чему-то довольно тривиальному, но просто не могу понять, что это будет. Я предполагаю, что действительно возможно сериализовать элемент данных потока. Должен ли я как-то указывать свойства данных для типов Stream или MemoryStream?