好的,我有以下代码,但现在却没有。唯一改变的是现在我正在使用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,但我认为这将被隔离...
答案 0 :(得分:1)
我将不得不进行调查 - 可能是属性和覆盖的一些细微差别 - 我不知道具体的变化,但那是......出乎意料。
作为试用版,您可以在[ProtoIgnore]
上添加override string MyString
- 但请确认它仍然序列化(来自基本类型)!
即
[ProtoIgnore]
protected override string MyString
{
get { return "dummy"; }
set { base.MyString = value; }
}
有关信息,我已经针对v2测试了您的代码,它在面向.NET 4.0的VS2010中完美运行;我在这台机器上没有v1方便......