这是一个场景:
[ProtoContract]
class A{}
一段时间后,另一位开发人员补充道:
class B : A {
int m;
}
如果某个类没有ProtoContractAttribute或在Google Protocol Buffers序列化过程中出错,我会回退到XML。 上面代码的问题是来自A的B固有的ProtoContractAttribute(注意下面的Inherited = 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")
{...}
任何解决方案/解决方法?
谢谢!
答案 0 :(得分:1)
嗯,我能想到的最简单的解决方法是:
bool isProto = Attribute.IsDefined(
yourType, typeof(ProtoContractAttribute), false);
然而,我也正在研究如果我们将这种非继承性破坏了什么。继承的东西看起来有点不对劲!
编辑:这也应该从r571开始修复;该属性现在未标记为已继承。