ここにも同様の質問があることは承知していますが、おそらく protobuf の経験が不足しているため、私が必要としているものほど直接的にこれを尋ねるものはありません。私は enyim のキャッシング クライアントのコード変換を行っていますが、派生クラスとインターフェイス実装の両方のクラスを正しくデシリアライズ/シリアル化する方法を理解するのに苦労しています。
こんなサンプルに
public class BaseClass
{
}
public interface ISomeRules
{
}
public class DerivedClass : BaseClass, ISomeRules
{
}
public class ThirdClass
{
ISomeRules ruleUser;
}
私は通常どこでも属性を使用するので、私はこのようなことをしたいです
[ProtoContract
,ProtoInclude(101,typeof(DerivedClass))
]
public class BaseClass
{
}
[ProtoContract
,ProtoInclude(102,typeof(DerivedClass))
]
public interface ISomeRules
{
}
[ProtoContract]
public class DerivedClass : BaseClass, ISomeRules
{
}
[ProtoContract]
public class ThirdClass
{
[ProtoMember(1)]
ISomeRules ruleUser;
}
しかし、それは黙ってキャッシングに失敗します。一部の人が提案したように、ProtoContract
から属性を削除するISomeRules
と、逆シリアル化は失敗します。
これはprotobuf-netを使用して実行できますか? これを行う正しい方法は何ですか?代わりに TypeModel (私はマスターしていませんが、簡単なテストで同じ問題があることを示しています) を使用する必要がありますか? それとも TypeModel と属性の組み合わせですか?