void parse() { MemberInfo[] mbs = type.GetMembers(); foreach (MemberInfo mb in mbs) { PBMember pbm = new PBMember(); //获取所有ProtoMemberAttribute属性(PB字段) ProtoMemberAttribute attr = Attribute.GetCustomAttribute(mb, typeof(ProtoMemberAttribute)) as ProtoMemberAttribute; if (attr != null) { pbm.name = attr.Name; pbm.tag = attr.Tag; pbm.datafmt = attr.DataFormat; DefaultValueAttribute dva = Attribute.GetCustomAttribute(mb, typeof(DefaultValueAttribute)) as DefaultValueAttribute; if (dva != null) { pbm.defaultVaule = dva.Value; } pbm.isRequire = attr.IsRequired; pbm.isPacked = attr.IsPacked; pbm.isOverrideList = attr.OverwriteList; } ProtoEnumAttribute pea = Attribute.GetCustomAttribute(mb, typeof(ProtoEnumAttribute)) as ProtoEnumAttribute; if (pea != null) { pbm.name = pea.Name; pbm.defaultVaule = pea.Value; } if (attr == null && pea == null) { continue; } Type memberType = null; switch (mb.MemberType) { case MemberTypes.Field: memberType = ((FieldInfo)mb).FieldType; break; case MemberTypes.Property: memberType = ((PropertyInfo)mb).PropertyType; break; default: throw new NotSupportedException(mb.MemberType.ToString()); } pbm.valueType = memberType; addMember(pbm); } }
void addMember(PBMember mb) { Debug.LogError("Add Member:" + mb.name + ",type=" + mb.valueType); mb.tab = tab + 1; mb.isEmum = type.IsEnum; members.Add(mb); //添加关联类型 Type associateType = mb.GetAssociateType(); if (ableGen.Contains(associateType)) { genList.Add(associateType); } }