public XMLSkippedMember(ReflectedMemberHandler field) : base(field, null) { Skip = true; }
public XMLFieldHandler(ReflectedMemberHandler field, XMLTypeHandler typeHandler) { ReflectionInfo = field; TypeHandler = typeHandler; Name = ReflectionInfo?.Name ?? XMLHelpers.GetTypeName(TypeHandler.Type); }
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); }