private void _CollectSerializableMembers(Type type, List <MemberBase> members) { var flags = BindingFlags.Instance | BindingFlags.Public; var idDecalringTemplate = 0; foreach (var field in type.GetFields(flags)) { if (!EditorMetaCommon.IsAutoCodeIgnore(field)) { var member = MemberBase.Create(field.FieldType, field.Name); if (field.DeclaringType == typeof(Template)) { members.Insert(idDecalringTemplate++, member); } else { members.Add(member); } } } }
public static MemberBase Create(Type type, string name) { MemberBase member = null; if (null != type) { if (type.IsPrimitive) { member = new PrimitiveMember(); } else if (type == typeof(string)) { member = new StringMember(); } else if (type == typeof(Vector2)) { member = new Vector2Member(); } else if (type == typeof(Vector3)) { member = new Vector3Member(); } else if (type == typeof(Vector4)) { member = new Vector4Member(); } else if (type == typeof(Color)) { member = new ColorMember(); } else if (type.IsArray) { member = new ArrayMember(); } else if (type.IsEnum) { member = new EnumMember(); } else if (type.IsGenericType) { var genericTypeDefinition = type.GetGenericTypeDefinition(); if (typeof(List <>) == genericTypeDefinition) { member = new ListMember(); } } else if (EditorMetaCommon.IsMetadata(type)) { member = new MetadataMember(); } } if (null != member) { member._type = type; member._name = name; } else { var text = string.Format("Invalid type found: typeof({0}) = {1}", name, type); Console.Error.WriteLine(text); } return(member); }