4

あるアセンブリに基本クラスがあり、別のアセンブリに基本クラスから継承する多数の生成されたクラスがあります。サブクラスが基本クラスのアセンブリにないため、subclassType(SerializerT.csの248行目)を解決しようとすると、protobuf-net(r282)を使用して基本タイプのリストをシリアル化できません。クラスを一緒に移動することは好ましいオプションではなく、リストを渡すことができることがかなり重要です。

これが私のタグ付けされた基本クラスです。含まれているタイプには、必要に応じてマークが付けられてProtoMember(x)います。

[ProtoContract] 
[ProtoInclude(1,"SomeItemType")]
[ProtoInclude(2,"AnotherItemType")]
[ProtoInclude(190,"YetAnotherItemType")]
public abstract class BaseItem
{
}

補足として、これは、デスクトップアプリとSOAPWebサービス間でデータを移動するためにBinaryFormatterを置き換えるためにprotobuf-netを使用することを評価することの一部です。

このようなことはできますか?もっと良い方法はありますか?明らかな何かが欠けているだけですか?別の長期的な質問は、3.5への最終的な移行に備えるために少し異なることをする必要があるかどうかです。

4

1 に答える 1

1

ProtoIncludeおそらく、を使用するのが最も簡単な方法ですtypeof。これにより、多くのニュアンスが自動的に処理されるためです。

[ProtoInclude(1, typeof(SomeItemType))]

または、アセンブリ修飾名を使用することもできます。

[ProtoInclude(1,"SomeItemType, SomeRandomAssembly")]

複数のsが関係するかなり特殊なケースでAppDomainは、イベントで魔法をかけることもできることがわかりましたがAppDomain.TypeResolve、可能であればそれは避ける必要があります。また、パイプラインのメタデータレイヤーを完全に作り直し、実行時にはるかに柔軟性を持たせています(コンパイル時にすべてを宣言する必要がないため、上記の問題の一部が発生します)。

于 2010-02-16T22:20:51.740 に答える