Example #1
0
 public static IXmlSerializer ForType(Type collectionType, XmlNameDeclaration elementName = null, IEnumerable <XmlArrayItemAttribute> arrayItems = null)
 {
     return((IXmlSerializer)
            CreateSerializerMethod
            .MakeGenericMethod(collectionType)
            .Invoke(null, new object[] { elementName, arrayItems }));
 }
Example #2
0
            // 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();
            }
Example #3
0
            // 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);
        }
Example #5
0
        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 }));
        }
Example #6
0
 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));
 }