拥有一个类类型(例如从 C 继承的 D,从 B 继承的 D)如何按从顶部父级到底部后代(B 成员, C成员,D成员)?
问问题
299 次
1 回答
1
通常答案是使用GetFields()
、GetProperties()
和来检查反射Attribute.IsDefined
。但是,在这种情况下,最好询问 protobuf-net 模型它认为存在什么:
using ProtoBuf;
using ProtoBuf.Meta;
using System;
[ProtoContract, ProtoInclude(5, typeof(Bar))]
public class Foo
{
[ProtoMember(1)]
public int X { get; set; }
}
[ProtoContract]
public class Bar : Foo
{
[ProtoMember(1)]
public string Y { get; set; }
}
static class Program {
static void Main() {
var metaType = RuntimeTypeModel.Default[typeof(Bar)];
do {
Console.WriteLine(metaType.Type.FullName);
foreach(var member in metaType.GetFields())
{
Console.WriteLine("> {0}, {1}, field {2}",
member.Member.Name, member.MemberType.Name,
member.FieldNumber);
}
} while ((metaType = metaType.BaseType) != null);
}
}
这样做的好处是它甚至可以用于自定义配置(属性不是配置 protobuf-net 的唯一机制)
于 2012-12-10T10:00:09.510 回答