如何从ProtoBuf.Meta.MetaType中获取它是从属性中获取的

本文关键字:获取 从属性 MetaType ProtoBuf Meta | 更新日期: 2023-09-27 18:21:43

如何从ProtoBuf.Meta.MetaType Type中获取它是从属性中获取的(例如ProtoIncludeAttribute)?

例如,我们从创建了一个程序集

[ProtoContract]
[ProtoInclude(TypeCode.MyClassChildCode, typeof(MyClassChild))]
public class MyClass {}
[ProtoContract]
public class MyClassChild: MyClass{}

我们的MyClassChildProtoBuf.Meta.MetaType。我们想从中获得TypeCode.MyClassChildCode。如何做到这一点?

如何从ProtoBuf.Meta.MetaType中获取它是从属性中获取的

我不能完全理解这个问题,但听起来就像你在问:

  • 我能判断MetaType是由属性还是手工制作的吗
  • 或者:我可以得到实际使用的属性吗

如果这是问题,那么:MetaType不会明确跟踪此问题。属性中的信息用于配置MetaType,然后被丢弃。例如,通过属性部分配置类型,然后通过代码应用一些调整(对于仅在运行时已知的部分)并不罕见。不过,所有配置MetaType上都可用。您提到了ProtoIncludeAttribute,它是子类型数据:一旦构造了MetaType,就可以通过.GetSubtypes()使用它。同样,还有.GetFields(),以及类型级配置选项的一系列属性(UseConstructor等)。

一些片段目前可能很难查询——代理人和工厂会跃然纸上。