コード例 #1
0
ファイル: XMLSkippedMember.cs プロジェクト: Cryru/Emotion
 public XMLSkippedMember(ReflectedMemberHandler field) : base(field, null)
 {
     Skip = true;
 }
コード例 #2
0
ファイル: XMLFieldHandler.cs プロジェクト: Cryru/Emotion
 public XMLFieldHandler(ReflectedMemberHandler field, XMLTypeHandler typeHandler)
 {
     ReflectionInfo = field;
     TypeHandler    = typeHandler;
     Name           = ReflectionInfo?.Name ?? XMLHelpers.GetTypeName(TypeHandler.Type);
 }
コード例 #3
0
        protected virtual Dictionary <string, XMLFieldHandler> IndexFields()
        {
            // Gather fields and create field handlers for them.
            PropertyInfo[] properties    = Type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
            FieldInfo[]    fields        = Type.GetFields(BindingFlags.Public | BindingFlags.Instance);
            var            fieldHandlers = new Dictionary <string, XMLFieldHandler>(properties.Length + fields.Length);

            for (var i = 0; i < properties.Length; i++)
            {
                PropertyInfo property = properties[i];

                // Only serialize properties with get and set methods;
                MethodInfo readMethod  = property.GetMethod;
                MethodInfo writeMethod = property.SetMethod;
                if (!property.CanRead || !property.CanWrite || readMethod == null || writeMethod == null)
                {
                    continue;
                }

                bool nonPublicAllowed = property.GetCustomAttribute <SerializeNonPublicGetSetAttribute>() != null;
                bool valid            = nonPublicAllowed || readMethod.IsPublic && writeMethod.IsPublic;
                if (!valid)
                {
                    continue;
                }

                var excludeProp = property.GetCustomAttribute <DontSerializeMembersAttribute>();

                // Mark members marked as "DontSerialize" or "DontSerializeMembers" as skip.
                bool   skip         = property.GetCustomAttribute <DontSerializeAttribute>() != null;
                string propertyName = property.Name;
                if (!skip && _excludedMembers != null && _excludedMembers.Contains(propertyName))
                {
                    skip = true;
                }

                var             reflectionHandler = new ReflectedMemberHandler(property);
                XMLFieldHandler handler           = skip ? new XMLSkippedMember(reflectionHandler) : XMLHelpers.ResolveFieldHandlerWithExclusions(property.PropertyType, reflectionHandler, excludeProp);
                if (handler == null)
                {
                    continue;
                }

                fieldHandlers.TryAdd(propertyName, handler);
            }

            for (var i = 0; i < fields.Length; i++)
            {
                FieldInfo field = fields[i];

                var excludeProp = field.GetCustomAttribute <DontSerializeMembersAttribute>();

                bool   skip      = field.GetCustomAttribute <DontSerializeAttribute>() != null;
                string fieldName = field.Name;
                if (!skip && _excludedMembers != null && _excludedMembers.Contains(fieldName))
                {
                    skip = true;
                }

                var             reflectionHandler = new ReflectedMemberHandler(field);
                XMLFieldHandler handler           = skip ? new XMLSkippedMember(reflectionHandler) : XMLHelpers.ResolveFieldHandlerWithExclusions(field.FieldType, reflectionHandler, excludeProp);
                if (handler == null)
                {
                    continue;
                }

                fieldHandlers.TryAdd(fieldName, handler);
            }

            return(fieldHandlers);
        }