ProtoBuf.net Свойства базового класса не включены при сериализации производного класса
Используя последнюю бета-версию 2.0 ProtoBuf.net, я пытаюсь сериализовать производный класс (только пример), и я получаю пустой файл. Почему свойства базового класса не сериализуются?
[ProtoContract]
[Serializable]
public class Web2PdfClient : Web2PdfEntity
{
}
[ProtoContract]
[Serializable]
public class Web2PdfEntity : EngineEntity
{
[ProtoMember(1)]
public string Title { get; set; }
[ProtoMember(2)]
public string CUrl { get; set; }
[ProtoMember(3)]
public string FileName { get; set; }
}
[ProtoContract]
[Serializable]
public class EngineEntity
{
public bool Result { get; set; }
public string ErrorMessage { get; set; }
public bool IsMembershipActive { get; set; }
public int ConversionTimeout { get; set; }
public byte[] FileStorage { get; set; }
}
При использовании кода ниже для сериализации класса я получаю пустой файл.
var Web2PDF = new Web2PdfClient
{
CUrl = "http://www.google.com",
FileName = "test.txt"
};
using (var file = File.Create(@"C:\Users\Administrator\Projects\temp\test.bin"))
{
Serializer.Serialize(file, Web2PDF);
}
1 ответ
На самом деле, я весьма удивлен, что не бросил исключения - я буду расследовать! Чтобы это работало, базовый тип должен иметь уникальный способ указать каждый из подтипов. Это можно указать с помощью атрибутов или (в v2) во время выполнения. Например:
[ProtoContract]
[Serializable]
public class Web2PdfClient : Web2PdfEntity
{
}
[ProtoContract]
[ProtoInclude(7, typeof(Web2PdfClient))]
[Serializable]
public class Web2PdfEntity : EngineEntity
{ ... }
Там нет ничего особенного 7
за исключением того, что он не должен сталкиваться с другими членами, определенными для этого типа. Можно определить несколько подтипов (с разными тегами). Обратите внимание также, что protobuf-Net не смотрит на [Serializable]
, так что вам это не нужно, если вы также не используете BinaryFormatter
(или похожие).
Так же, EngineEntity
должен рекламировать свои ожидаемые подтипы и должен указывать членов для сериализации (и против какого тега).