protobuf-net的抽象/数组问题

时间:2011-10-31 08:07:48

标签: c# silverlight protobuf-net

我在尝试反序列化一系列对象时遇到问题,这些对象派生自相同的抽象基类,并使用 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选项,我在反序列化时得到以下一个例外:

  1. [ProtoMember(1,AsReference = true,DynamicType = true)](如上所述):System.RuntimeType.TryChangeType中的参数异常。即使Base不是抽象的,也会发生这种情况
  2. [ProtoMember(1,DynamicType = true)]:System.RuntimeType.TryChangeType中的参数异常。即使Base不是抽象的,也会发生这种情况
  3. [ProtoMember(1,AsReference = true)]:'无法创建抽象类'异常。如果Base不是抽象的,我得到一个“对象与目标类型不匹配”。异常。
  4. [ProtoMember(1)]:没有例外,但我需要将事物序列化作为参考(同样,反序列化的Obj在'array'中有四个项目,但我认为已经报告了这个bug)。
  5. 我需要能够使用AsReference序列化数组...如果我没有做错什么,有人可以想到一个体面的解决方法吗? 谢谢!

0 个答案:

没有答案