エンティティモデルには、やや複雑なクラスの階層があります。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()
ます。
他に選択肢はありますか?