クラス タイプ (たとえば、C から継承された D、B から継承された) を持つprotobuf .net ProtoMember属性でマークされたすべてのクラス メンバー (継承を含む) を上位の親から下位の子孫 (B メンバー、 Cメンバー、Dメンバー)?
質問する
299 次
1 に答える
1
通常、答えは、、、、およびを使用してGetFields()
、リフレクションで確認することです。ただし、この場合、protobuf-netモデルに何が存在すると思われるかを尋ねることをお勧めします。GetProperties()
Attribute.IsDefined
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 に答える