12

Protobuf.netを使用しているプロジェクトでこの例外が発生しています。

InvalidOperationException "Unexpected sub-type: foo"

送信しているクラスがあります。これは次のようになります。

class message
{
    list<bar> listOfBars;
}

fooはオフバーを継承しますが、protobufはこれを抑制し、上記の例外を生成するようです。これを回避する方法はありますか?リスト内のバーのすべての異なるサブタイプを保持できる必要があるため、よりタイプが制約されたソリューションは困難/不可能です。

4

2 に答える 2

19

誤解されているかもしれませんが、継承されたクラスで、どのサブタイプが継承するかを指定する必要があると思います。たとえば、次のようになります。

[Serializable, ProtoContract, ProtoInclude(100, typeof(Foo))]
class Bar { }

[Serializable, ProtoContract]
class Foo : Bar { } // Inherits from Bar
于 2010-09-26T11:53:15.887 に答える
0

私はプロトコルバッファを100%使用しているわけではなく、おそらくここではベースから外れていますが、BarがFooから継承しているListからListを割り当てることができると思いますか?これは事実ではありません-それらは関係のない2つの異なるタイプと見なされます。.NET 4では、共変型パラメーターがサポートされていますが、コレクションからのサポートが必要です(これは、重大な変更になるため、.NET 4でもリストは提供しません-おそらくこれを試みる古いコードは、とにかく壊れていますが、それでもまだです行動の変化)

于 2010-09-26T11:58:04.090 に答える