2

エンティティモデルには、やや複雑なクラスの階層があります。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_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

などなど...

現在、protobuf-netを使用してWCF経由でこれらのタイプのインスタンスを転送すると、「レベル4」クラスのプロパティのみが転送されます。つまり、基本クラスのすべてのプロパティが失われます。

他のいくつかのStackOverflowスレッド(ここここ、およびここ)から、これがデフォルトの動作であり、これを回避するための2つのオプションがあることを読みました。

  1. [ProtoInclude]基本クラスの属性を使用します。
  2. TypeModelおよびを使用して、実行時に継承を構成しますAddSubType()

ただし、派生クラスが多数あるため、これらのオプションはいずれもこのシナリオでは実行できません。オプション1は、レベル1の基本クラスの何百もの属性を意味します。オプション2は、への多くの呼び出しを意味しAddSubType()ます。

他に選択肢はありますか?

4

1 に答える 1

0

最終的には、データを元に戻すことができるように、データをどのように保存するかを理解する必要があります。推測することはできません...つまり、それを行うための唯一の堅牢な方法は、モデルをどこかに定義することです。ただし、これは生のコードである必要はありません。たとえば、実行時にインクルードして(AddSubTypeを介して)処理する外部ファイルに保存できる場合があります。

于 2013-01-02T17:35:59.160 に答える