我想使用protobuf-net將派生類序列化爲其基類。換句話說,我想序列化過程中丟棄的類型派生的任何指示:protobuf-net作爲基類的序列化
[ProtoContract]
class Base
{
[ProtoMember(1)]
public string PublicInfo { get; set; }
}
class Derived : Base
{
public string SecretInfo { get; set; }
}
class Program
{
static void Main(string[] args)
{
Derived d = new Derived()
{
PublicInfo = "public info",
SecretInfo = "secret info"
};
using (var ms = new MemoryStream())
{
Serializer.NonGeneric.Serialize(ms, d as Base);
ms.Seek(0, SeekOrigin.Begin);
Base deserialized = Serializer.Deserialize<Base>(ms);
Console.WriteLine("Deserialized type: " + deserialized.GetType());
Console.WriteLine("Deserialized value: " + deserialized.PublicInfo);
}
Console.ReadLine();
}
}
我想上面的程序產生
Deserialized type: Base
Deserialized value: public info
,而是我得到「異常類型不是預期的「。
如果我將[ProtoContract]
添加到Derived
,PublicInfo
字段未設置。如果我還將[ProtoInclude(2, typeof(Derived))]
添加到Base
那麼反序列化類型是Derived
,而不是Base
,如我所願。
我錯過了什麼?如果我在其他地方忽略了答案,道歉。我想我要求的是與this question相反的內容,但我寧願不必通過RuntimeTypeModel
明確添加字段。
這是一個很好的觀點,謝謝。 – Gabriel