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); } }
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); }
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); }
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); }
protected override BindingFlags GetFlags(Type type, XmlClassSerializable attribute) { BindingFlags flags = base.GetFlags(type, attribute); return(flags | (BindingFlags.GetField | BindingFlags.GetProperty)); }
protected virtual bool IsDeepSerializable(Type type) { XmlClassSerializable xmlClassSerializableAttribute = this.GetXmlClassSerializableAttribute(type); return(xmlClassSerializableAttribute != null && xmlClassSerializableAttribute.Deep); }
protected virtual BindingFlags GetFlags(Type type) { XmlClassSerializable xmlClassSerializableAttribute = this.GetXmlClassSerializableAttribute(type); return(this.GetFlags(type, xmlClassSerializableAttribute)); }