0
我想在運行時動態初始化RuntimeTypeModel。我正在使用下面的函數,它一直在工作,直到我添加了包含字段的部分。這個模型中的基本類型只使用ProtoMember屬性,沒有別的(從適當的bas類繼承的excpet)指定可以序列化的內容。這是錯誤的代碼。Protobuf網C#:添加字段到RuntimeTypeModel
MetaType childMetaData = model[parentType].AddSubType(includeTagNumber++, child);
foreach (MemberInfo fi in child.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).OrderBy(x => x.Name).Reverse())
{
if (fi.MemberType == MemberTypes.Field || fi.MemberType == MemberTypes.Property)
{
if (fi.DeclaringType.Equals(child))
{
ProtoMemberAttribute attr = fi.GetCustomAttribute<ProtoMemberAttribute>();
if (attr.IsNotNull())
{
childMetaData.Add(attr.Tag, fi.Name); //Error here...
}
}
}
}
我得到一個ArgumentException,說它無法確定我的任何字段的memberName參數。
編輯: 我看着爲protobuf網軀幹和V1代碼及以下線路運行:
MemberInfo[] members = type.GetMember(memberName, Helpers.IsEnum(type) ? BindingFlags.Static | BindingFlags.Public : BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if(members != null && members.Length == 1) mi = members[0];
if (mi == null) throw new ArgumentException("Unable to determine member: " + memberName, "memberName");
當我調用之前運行就行了同樣的思路,他們來了如預期的那樣MemberInfo [1]返回...那麼爲什麼?任何幫助?
實施例類:
class SerializedButton : VProtoCapable
{
[ProtoMember(1, IsRequired=true)]
private int someData
public int SomeData
{
get { return someData; }
set { someData = value; }
}
public SerializedButton() { }
}