如何从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{}
我们的MyClassChild
有ProtoBuf.Meta.MetaType
。我们想从中获得TypeCode.MyClassChildCode
。如何做到这一点?
我不能完全理解这个问题,但听起来就像你在问:
- 我能判断
MetaType
是由属性还是手工制作的吗 - 或者:我可以得到实际使用的属性吗
如果这是问题,那么:MetaType
不会明确跟踪此问题。属性中的信息用于配置MetaType
,然后被丢弃。例如,通过属性部分配置类型,然后通过代码应用一些调整(对于仅在运行时已知的部分)并不罕见。不过,所有配置在MetaType
上都可用。您提到了ProtoIncludeAttribute
,它是子类型数据:一旦构造了MetaType
,就可以通过.GetSubtypes()
使用它。同样,还有.GetFields()
,以及类型级配置选项的一系列属性(UseConstructor
等)。
有一些片段目前可能很难查询——代理人和工厂会跃然纸上。