Protobuf-net: Szeregowanie klasy innej firmy za pomocą elementu danych Stream

Jak serializować strumień danych (lub bardziej poprawnie strumieniowo) członka klasy?

Zakładając, że mamy klasę innej firmy, której nie możemy przypisać:

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
};

Próbuję użyć protobuf-net do serializacji klasy. Pracując nad wyjątkami i różnymi pytaniami SO, które wymyśliłem:

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);
}

Powyższe działa bez błędów. Etykieta i typ danych są poprawne w f2, ale zmienna Dane jest tylko pustym strumieniem. Debugowanie kodu Widzę, że strumień pamięci ma około 29 bajtów (podczas gdy strumień danych w samym f1 ma ponad 77 KB).

Czuję się tak, jakbym tęsknił za czymś całkiem trywialnym, ale po prostu nie mogę zrozumieć, co to będzie. Zakładam, że rzeczywiście możliwe jest serializowanie elementu danych strumienia. Czy muszę w jakiś sposób określić właściwości danych dla typów Stream lub MemoryStream?

questionAnswers(2)

yourAnswerToTheQuestion