Exemple #1
0
        protected virtual bool FillCollection(object data, SerializableData serializableData)
        {
            bool result;

            if (!base.IsCollection(data))
            {
                result = false;
            }
            else
            {
                ICollection collection = data as ICollection;
                foreach (object current in collection)
                {
                    SerializableData     serializableData2             = new SerializableData();
                    XmlClassSerializable xmlClassSerializableAttribute = base.GetXmlClassSerializableAttribute(current.GetType());
                    if (!this.FindXmlSerializableClassAttribute(current, serializableData2))
                    {
                        Type type = current.GetType();
                        Collection <DataMember> collection2 = new Collection <DataMember>();
                        this.FillDataMembers(type, collection2, false, this.IsDeepSerializable(type), this.GetFlags(type, xmlClassSerializableAttribute));
                        if (collection2.Count == 0)
                        {
                            continue;
                        }
                        this.CreateSerializableData(current, serializableData2);
                        this.FindClassFields(current, serializableData2, collection2);
                    }
                    serializableData.SerializableDataCollection.Add(serializableData2);
                }
                result = true;
            }
            return(result);
        }
        protected virtual void Filler(object dataToFill, Type type, object[] parameters, SerializableData serializableData)
        {
            XmlClassSerializable xmlClassSerializableAttribute = base.GetXmlClassSerializableAttribute(type);
            bool         flag     = this.IsDeepSerializable(type);
            BindingFlags flags    = this.GetFlags(type, xmlClassSerializableAttribute);
            PropertyInfo property = base.GetProperty(type, serializableData.FieldName, flags);
            FieldInfo    field    = base.GetField(type, serializableData.FieldName, flags);

            try
            {
                if ((property != null && property.CanWrite) || (field != null && !field.IsLiteral))
                {
                    type.InvokeMember(serializableData.FieldName, flags, null, dataToFill, parameters);
                }
                else if (!type.BaseType.Equals(typeof(object)) && type.BaseType != null && flag)
                {
                    this.FillObjectField(dataToFill, type.BaseType, serializableData);
                }
                else if (base.IsCollection(type) && !base.IsArray(type))
                {
                    this.InvokeAddingMethod(dataToFill, parameters);
                }
            }
            catch
            {
                throw new XmlSerializationException(dataToFill, serializableData, property, field);
            }
        }
Exemple #3
0
        protected virtual BindingFlags GetFlags(Type type, XmlClassSerializable attribute)
        {
            bool         flag         = this.IsDeepSerializable(type);
            BindingFlags bindingFlags = (attribute != null && attribute.Flags != BindingFlags.Default) ? attribute.Flags : (BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);

            if (!this.IsBaseType(type) && (attribute == null || attribute.Flags == BindingFlags.Default))
            {
                bindingFlags |= BindingFlags.Instance;
            }
            else if (this.IsBaseType(type))
            {
                bindingFlags = (BindingFlags.Static | BindingFlags.Public);
            }
            if (attribute == null || attribute.Flags == BindingFlags.Default)
            {
                if (!flag)
                {
                    bindingFlags |= BindingFlags.DeclaredOnly;
                }
                else
                {
                    bindingFlags |= (BindingFlags.NonPublic | BindingFlags.FlattenHierarchy);
                }
            }
            return(bindingFlags);
        }
Exemple #4
0
        protected virtual void CreateSerializableData(object data, SerializableData serializableData)
        {
            Type type = data.GetType();
            bool flag = true;
            XmlClassSerializable xmlClassSerializableAttribute = base.GetXmlClassSerializableAttribute(type);

            if (xmlClassSerializableAttribute == null || xmlClassSerializableAttribute.TagName == string.Empty)
            {
                flag = false;
            }
            serializableData.Type     = type.FullName;
            serializableData.Assembly = type.Assembly.ToString();
            serializableData.AssemblyQualifiedName = type.AssemblyQualifiedName;
            serializableData.Value   = (flag ? string.Empty : data.ToString());
            serializableData.TagName = (flag ? xmlClassSerializableAttribute.TagName : type.Name);
        }
Exemple #5
0
        protected virtual bool FindXmlSerializableClassAttribute(object data, SerializableData serializableData)
        {
            Type type = data.GetType();
            XmlClassSerializable xmlClassSerializableAttribute = base.GetXmlClassSerializableAttribute(type);
            bool result;

            if (xmlClassSerializableAttribute == null)
            {
                result = false;
            }
            else
            {
                this.CreateSerializableData(data, serializableData);
                Collection <DataMember> dataMembers = new Collection <DataMember>();
                this.FillDataMembers(type, dataMembers, true, xmlClassSerializableAttribute.Deep, this.GetFlags(type, xmlClassSerializableAttribute));
                this.FindClassFields(data, serializableData, dataMembers);
                result = true;
            }
            return(result);
        }
Exemple #6
0
        protected override BindingFlags GetFlags(Type type, XmlClassSerializable attribute)
        {
            BindingFlags flags = base.GetFlags(type, attribute);

            return(flags | (BindingFlags.GetField | BindingFlags.GetProperty));
        }
Exemple #7
0
        protected virtual bool IsDeepSerializable(Type type)
        {
            XmlClassSerializable xmlClassSerializableAttribute = this.GetXmlClassSerializableAttribute(type);

            return(xmlClassSerializableAttribute != null && xmlClassSerializableAttribute.Deep);
        }
Exemple #8
0
        protected virtual BindingFlags GetFlags(Type type)
        {
            XmlClassSerializable xmlClassSerializableAttribute = this.GetXmlClassSerializableAttribute(type);

            return(this.GetFlags(type, xmlClassSerializableAttribute));
        }