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?

Ответы на вопрос(2)

Ваш ответ на вопрос