有没有办法在使用Protobuf-net和继承时纠正此运行时错误?

时间:2011-02-11 22:32:08

标签: c# inheritance protobuf-net

好的,我有以下代码,但现在却没有。唯一改变的是现在我正在使用VS2010和.NET4

[ProtoContract]
[ProtoInclude(1, typeof(DerivedClass))]
public abstract class BaseClass
{
    [ProtoMember(2)]
    protected virtual string MyString { get; set; }
}

[ProtoContract]
public class DerivedClass : BaseClass
{
    [ProtoMember (2)]
    public readonly int SomeInt = 10;

    protected override string MyString
    {
        get { return "dummy"; }
        set { base.MyString = value; }
    }
}

[Test]
public void Test()
{
    var derived = new DerivedClass();


    using (Stream s = new MemoryStream ())
        Serializer.Serialize(s, derived);   // InvalidOperationException: Duplicate tag 2 detected in SomeInt
}

我在这里缺少什么?

当我覆盖使用相同标签号的父属性时,我可以看到PB正在对两个类的相同标签号进行barfing,但我认为这将被隔离...

1 个答案:

答案 0 :(得分:1)

我将不得不进行调查 - 可能是属性和覆盖的一些细微差别 - 我不知道具体的变化,但那是......出乎意料。

作为试用版,您可以在[ProtoIgnore]上添加override string MyString - 但请确认它仍然序列化(来自基本类型)!

[ProtoIgnore]
protected override string MyString
{
    get { return "dummy"; }
    set { base.MyString = value; }
}

有关信息,我已经针对v2测试了您的代码,它在面向.NET 4.0的VS2010中完美运行;我在这台机器上没有v1方便......