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