public static IXmlSerializer ForType(Type collectionType, XmlNameDeclaration elementName = null, IEnumerable <XmlArrayItemAttribute> arrayItems = null) { return((IXmlSerializer) CreateSerializerMethod .MakeGenericMethod(collectionType) .Invoke(null, new object[] { elementName, arrayItems })); }
// Collection member public SerializableMember( XmlNodeType nodeType, XmlNameDeclaration memberName, Int32 order, MemberInfo member, Boolean wrapCollection = true, IEnumerable <XmlArrayItemAttribute> arrayItems = null) { this.MemberName = memberName; this.NodeType = nodeType; this.Order = order; if (member is PropertyInfo) { CreateAccessors((PropertyInfo)member); } else if (member is FieldInfo) { CreateAccessors((FieldInfo)member); } else { throw new ArgumentException("Member type not supported.", "member"); } this.isCollection = true; this.wrapCollection = wrapCollection; this.serializer = this.wrapCollection || arrayItems != null? XmlCollectionSerializer.ForType(this.MemberType, arrayItems : arrayItems) : XmlCollectionSerializer.ForType(this.MemberType, elementName: this.MemberName); this.SelectInitializer(); }
// Standard Member public SerializableMember( XmlNodeType nodeType, XmlNameDeclaration memberName, Int32 order, MemberInfo member) { this.MemberName = memberName; this.NodeType = nodeType; this.Order = order; if (member is PropertyInfo) { this.CreateAccessors((PropertyInfo)member); } else if (member is FieldInfo) { this.CreateAccessors((FieldInfo)member); } else { throw new ArgumentException("Member type not supported.", "member"); } this.serializer = XmlSerializerBase.ForType(this.MemberType); if (nodeType == XmlNodeType.Attribute && !(this.serializer is IXmlPrimitiveSerializer) && !(this.serializer is IXmlSerializableSerializer) && !(this.serializer is IXmlEnumSerializer)) { throw new NotSupportedException("Complex types cannot be serialized as xml attributes"); } this.SelectInitializer(); }
internal static XmlNameDeclaration GetRootNameForType(Type t) { XmlNameDeclaration result = XmlPrimitiveSerializer.TryGetPrimitiveTypeName(t).Bind(str => new XmlNameDeclaration(str)); if (result == null) { var rootAttr = t.GetCustomAttributes <XmlRootAttribute>(inherit: false).FirstOrDefault(); if (rootAttr != null) { result = new XmlNameDeclaration(rootAttr.ElementName, rootAttr.Namespace); } else { result = new XmlNameDeclaration(GetSimpleTypeName(t)); } } return(result); }
public static IXmlSerializer <TCollection> CreateSerializer <TCollection>(XmlNameDeclaration elementName = null, IEnumerable <XmlArrayItemAttribute> arrayItems = null) { var collectionInterface = typeof(TCollection).GetInterface("ICollection`1"); if (collectionInterface == null) { throw new InvalidOperationException( "XmlCollectionSerializer only supports collection that implement the generic ICollection<> interface." ); } var elementType = collectionInterface.GetGenericArguments()[0]; return((IXmlSerializer <TCollection>) CreateSerializerMethod2 .MakeGenericMethod(typeof(TCollection), elementType) .Invoke(null, new object[] { elementName, arrayItems })); }
public static XmlCollectionSerializer <TCollection, TElement> CreateSerializer <TCollection, TElement>(XmlNameDeclaration elementName = null, IEnumerable <XmlArrayItemAttribute> arrayItems = null) where TCollection : ICollection <TElement> { return(new XmlCollectionSerializer <TCollection, TElement>(elementName, arrayItems)); }