public XMLComplexBaseTypeHandler CloneWithExclusions(DontSerializeMembersAttribute exclusions) { Debug.Assert(exclusions != null); var clone = (XMLComplexBaseTypeHandler)MemberwiseClone(); clone._clonedFrom = this; // Copy all field handlers to the clone, except the ones that are excluded. Dictionary <string, XMLFieldHandler> fieldHandlers = _fieldHandlers.Value; var cloneHandlers = new Dictionary <string, XMLFieldHandler>(); HashSet <string> excludedFields = exclusions.Members; foreach (KeyValuePair <string, XMLFieldHandler> fields in fieldHandlers) { XMLFieldHandler fieldHandler = fields.Value; if (excludedFields.Contains(fields.Key)) { fieldHandler = new XMLFieldHandler(fieldHandler.ReflectionInfo, fieldHandler.TypeHandler) { Skip = true } } ; cloneHandlers.Add(fields.Key, fieldHandler); } clone._fieldHandlers = new Lazy <Dictionary <string, XMLFieldHandler> >(cloneHandlers); return(clone); }
protected XMLComplexBaseTypeHandler(Type type) : base(type) { // Check if the type is excluding any fields. DontSerializeMembersAttribute exclusion = null; object[] exclusions = type.GetCustomAttributes(typeof(DontSerializeMembersAttribute), false); if (exclusions.Length > 0) { exclusion = exclusions[0] as DontSerializeMembersAttribute; } _excludedMembers = exclusion?.Members; _fieldHandlers = new Lazy <Dictionary <string, XMLFieldHandler> >(IndexFields); }