Exemplo n.º 1
0
            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);
                }
            }
Exemplo n.º 2
0
            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);
                }
            }