2017-07-17 2 views
0

私たちのアプリケーションでは、異なるパッケージのWCFでprotobufに渡されるモデルを用意しています。プロジェクト。チャイルドプロジェクトでは、すべてのクラスが特定のビジネスエリアに特化していることがわかります。子クラスが同じアセンブリ内にないときにprotobufの継承をリストする方法

すべてのDLLは、顧客が取り込んだ機能によっては出荷されません。

私はpossiblesを指定する一つの方法は、クラスをチャイルズことを知っているのようなものです:

[ProtoContract] 
[ProtoInclude(100, typeof(Derived))] 
[ProtoInclude(101, typeof(Derive2))] 
public class Base { 
    [ProtoMember(Order=1)] 
    int Old; 
} 

しかし、私の場合、私はDerivedDerived2クラス(それは循環参照を引き起こすが含まれているプロジェクトを参照することはできませんし、さらに重要なのは、親がすべての子供を知っていなければならないということは奇妙なことです)。

デフォルトのDataContractSerializerでは、使用しているクラスの種類を見つける方法を指定することができましたが、これを実現する方法はありますか?あるいは私は自分の制約でprotobufを使うことができませんか?

答えて

0

親がすべての子供を知っていることは奇妙です。

いいえ、実際は正常です。 typeofで循環参照の問題を回避するために、同じ方法が

仕事も参照[XmlInclude][KnownType]は、あなたが文字列としてアセンブリ修飾名を使用することができます。

[ProtoInclude(100, "your assembly qualified name here")] 
[ProtoInclude(101, "another assembly qualified name here")] 

別のオプションは、RuntimeTypeModel.Default[typeof(RootType)].AddSubType(...)と、実行時に毎回設定することです - しかし:アセンブリ修飾名を取得するには、その後、typeof(Foo).AssemblyQualifiedNameの書き込み何を見てあなたはまだ信頼性の整数で確実にそれを設定できるようにする必要があります。

+0

さて、私はオブジェクト指向のアプローチが反対であり、実行時にKnownTypeではなくDataContractResolverを使用できると私は考えています。整数について、1つの副題:SubTypesとProtoMembersに固有のaccrosであるべきですか?また、親クラスとその子との間には、それらの番号が一意であるか、またはその子のIDが親の子のIDからオフセットされるようにするためのメカニズムがありますか? – J4N

+0

@ J4Nいいえ、彼ら(members + includes)は個々の親の中で一意である必要があります –

関連する問題