エンティティモデルには、やや複雑なクラスの階層があります。BaseEntityすべてのエンティティの基本クラスがあり、次に、から派生しBaseEntityたいくつかの「レベル2」クラス、任意の「レベル2」クラスから派生したいくつかの「レベル3」クラス、および任意の「レベル3」から派生した多くの「レベル4」クラスがあります。 " クラス。つまり、次のようなものがあります。
- BaseEntity
- DerivedEntity_1
- DerivedEntity_1_1
- DerivedEntity_1_1_1
 - DerivedEntity_1_1_2
 - DerivedEntity_1_1_3
 
 - DerivedEntity_1_2
- DerivedEntity_1_2_1
 - DerivedEntity_1_2_2
 
 
 - DerivedEntity_1_1
 - DerivedEntity_2
- DerivedEntity_2_1
- DerivedEntity_2_1_1
 
 - DerivedEntity_2_2
- DerivedEntity_2_2_1
 - DerivedEntity_2_2_2
 - DerivedEntity_2_2_3
 - DerivedEntity_2_2_4
 
 
 - DerivedEntity_2_1
 
 - DerivedEntity_1
 
などなど...
現在、protobuf-netを使用してWCF経由でこれらのタイプのインスタンスを転送すると、「レベル4」クラスのプロパティのみが転送されます。つまり、基本クラスのすべてのプロパティが失われます。
他のいくつかのStackOverflowスレッド(ここ、ここ、およびここ)から、これがデフォルトの動作であり、これを回避するための2つのオプションがあることを読みました。
[ProtoInclude]基本クラスの属性を使用します。TypeModelおよびを使用して、実行時に継承を構成しますAddSubType()。
ただし、派生クラスが多数あるため、これらのオプションはいずれもこのシナリオでは実行できません。オプション1は、レベル1の基本クラスの何百もの属性を意味します。オプション2は、への多くの呼び出しを意味しAddSubType()ます。
他に選択肢はありますか?