シナリオは次のとおりです。
[ProtoContract]
class A{}
しばらくして、別の開発者が次のように追加します。
class B : A {
int m;
}
クラスにProtoContractAttributeがない場合、またはGoogle Protocol Buffersのシリアル化中にエラーが発生した場合は、XMLにフォールバックします。上記のコードの問題は、AからのB固有のProtoContractAttribute(以下では、Attached = trueに注意)ですが、メンバー'm'にはProtoMemberAttributeがないため、シリアル化されません。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum
| AttributeTargets.Interface, AllowMultiple = false, Inherited = true)]
public sealed class ProtoContractAttribute : Attribute
{...}
次のものを追加できると便利です。
[AttributeUsage(AttributeTargets.Class, Inherited = true)]
public class ProtoContractWithoutInheritance : ProtoBuf.ProtoContractAttribute
{
}
ただし、ProtoContractAttributeは封印されており、封印されていなくても、ProtoBuf-Netは明示的なタイプを探しています。
if (item.AttributeType.FullName == "ProtoBuf.ProtoContractAttribute")
{...}
解決策/回避策はありますか?
ありがとう!