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); } }
private void ProtoEnumToLuaEnum(ref StringBuilder sb, Type itemType, string itemName, ProtoEnumAttribute protoEnumAttribute, bool isLastOne = false) { if (protoEnumAttribute != null) { sb.Append("\t"); sb.Append(protoEnumAttribute.Name); sb.Append(" = "); // proto 2+ //sb.Append(protoEnumAttribute.Value.ToString()); // proto 3+ var enums = Enum.GetValues(itemType); foreach (var item in enums) { if (item.ToString().Equals(itemName)) { sb.Append((int)item); break; } } if (isLastOne) { sb.Append("\r\n"); } else { sb.Append(",\r\n"); } } }