我在尝试反序列化一系列对象时遇到问题,这些对象派生自相同的抽象基类,并使用 AsReference 进行序列化。以下是我的问题:
[ProtoContract]
[ProtoInclude(1,typeof(A))]
[ProtoInclude(2, typeof(B))]
public abstract class Base
{}
[ProtoContract]
public class A:Base
{
[ProtoMember(1)]
public int J
{
get;
set;
}
}
[ProtoContract]
public class B : Base
{ }
[ProtoContract]
public class Obj
{
[ProtoMember(1,AsReference=true,DynamicType=true)]
public Base[] array = new Base[] { new A(), new B() };
}
然后尝试去/序列化:
Obj bob = new Obj();
using (MemoryStream m = new MemoryStream())
{
Serializer.Serialize(m, bob);
m.Position = 0;
var clone = Serializer.Deserialize<Obj>(m);
}
根据'Obj.array'的ProtoMember选项,我在反序列化时得到以下一个例外:
我需要能够使用AsReference序列化数组...如果我没有做错什么,有人可以想到一个体面的解决方法吗? 谢谢!