2011-02-11 4 views
1

私は次のコードを使用していましたが、現在は使用していません。変更された唯一のものは今VS2010と.NET4を使用していますProtobuf-netと継承を使用しているときにこのランタイムエラーを修正する方法はありますか?

[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

を見ることができる私が調査する必要があります - おそらく属性やオーバーライドのニュアンス - 具体的な変更はわかりませんが、それは予期しないことです。

お試し版として、override string MyString[ProtoIgnore]を追加できますが、引き続き(ベースタイプから)シリアル化されていることをご確認ください!詳細については

すなわち

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

、私はV2に対するあなたのコードをテストしてみた、そしてそれは、.NET 4.0をターゲットとVS2010で完全に働きました。私はこのマシンに便利なv1を持っていません...

+0

@Marcはい、私はv1.0.0.282を使用しています。私はV2のダウンロードを見つけることができません。 –

+0

@Stecy v2は現時点ではコード専用です。 ProtoIgnoreは何をしましたか?あなたはv2を試してみることを歓迎する以上のものです。それは正式にリリースされたものではありません。 –

+0

ProtoIgnoreを試してみました。 –

関連する問題