Ejemplo n.º 1
0
        public XmlProperty(
            PropertyInfo propertyInfo,
            XmlName name,
            XmlMappingType mappingType                   = XmlMappingType.Element,
            bool isRequired                              = false,
            XmlTypeHandling?typeHandling                 = null,
            XmlNullValueHandling?nullValueHandling       = null,
            XmlDefaultValueHandling?defaultValueHandling = null,
            object defaultValue                          = null,
            XmlItem item = null,
            IEnumerable <XmlKnownType> knownTypes = null,
            bool isCollection = false,
            int order         = -1)
            : base(propertyInfo.PropertyType, name, mappingType, typeHandling, nullValueHandling, defaultValueHandling, defaultValue, item, knownTypes)
        {
            if (isCollection)
            {
                if (!propertyInfo.PropertyType.IsEnumerable())
                {
                    throw new ArgumentException("Collection flag is available only for the IEnumerable type.");
                }

                this.isCollection = true;
            }

            this.propertyInfo  = propertyInfo;
            this.isRequired    = isRequired;
            this.order         = order;
            hasGetterAndSetter = propertyInfo.CanRead && propertyInfo.CanWrite;
        }
 public static XmlObjectContractBuilder <T> SetProperty <T, TProperty>(
     this XmlObjectContractBuilder <T> builder,
     Expression <Func <T, TProperty> > expression,
     XmlName name = null,
     XmlMappingType mappingType = XmlMappingType.Element)
 {
     return(SetProperty(builder, expression, x => x.SetName(name).SetMappingType(mappingType)));
 }
 public static TBuilder SetProperty <TBuilder>(
     this TBuilder builder,
     string propertyName,
     XmlName name = null,
     XmlMappingType mappingType = XmlMappingType.Element)
     where TBuilder : XmlObjectContractBuilder
 {
     return(SetProperty(builder, propertyName, x => x.SetName(name).SetMappingType(mappingType)));
 }
Ejemplo n.º 4
0
        public XmlMember Match(XmlMappingType mappingType, XmlReader reader)
        {
            if (mappingType == Property.MappingType)
            {
                if (NameRef.Match(reader))
                {
                    return(Property);
                }

                if (KnownNameRefs != null)
                {
                    for (var i = 0; i < KnownNameRefs.Length; i++)
                    {
                        if (KnownNameRefs[i].Match(reader))
                        {
                            return((Item ?? Property).KnownTypes[i]);
                        }
                    }
                }
            }

            return(null);
        }
        private void ReadProperty(XmlReader reader, object target, XmlPropertyInfo[] propertyInfos, XmlMappingType mappingType, XmlSerializationContext context)
        {
            for (var i = 0; i < propertyInfos.Length; i++)
            {
                var member = propertyInfos[i].Match(mappingType, reader);

                if (member != null)
                {
                    if (propertyInfos[i].CollectionProxy == null)
                    {
                        var value = context.Deserialize(reader, member);
                        SetValue(target, propertyInfos[i].Property, value);
                    }
                    else
                    {
                        var value = context.Deserialize(reader, propertyInfos[i].Property.Item);
                        propertyInfos[i].CollectionProxy.Add(value);
                    }

                    propertyInfos[i].Assigned = true;
                    return;
                }
            }

            OnUnknownProperty(reader, target, context);
        }
Ejemplo n.º 6
0
 public static XmlPropertyBuilder SetMappingType(this XmlPropertyBuilder builder, XmlMappingType mappingType)
 {
     builder.MappingType = mappingType;
     return(builder);
 }
Ejemplo n.º 7
0
        internal XmlMember(
            Type valueType,
            XmlName name,
            XmlMappingType mappingType                   = XmlMappingType.Element,
            XmlTypeHandling?typeHandling                 = null,
            XmlNullValueHandling?nullValueHandling       = null,
            XmlDefaultValueHandling?defaultValueHandling = null,
            object defaultValue = null,
            XmlItem item        = null,
            IEnumerable <XmlKnownType> knownTypes = null)
        {
            if (valueType == null)
            {
                throw new ArgumentNullException("valueType");
            }

            if (name == null)
            {
                throw new ArgumentNullException("name");
            }

            var isFinalType = valueType.IsFinalType();

            this.valueType            = valueType;
            this.name                 = name;
            this.typeHandling         = typeHandling;
            this.defaultValueHandling = defaultValueHandling;
            this.defaultValue         = defaultValue;
            isOpenType                = !isFinalType && valueType.IsVisible;
            this.item                 = item;
            this.nullValueHandling    = nullValueHandling;
            this.mappingType          = mappingType;

            if (knownTypes != null)
            {
                var count = knownTypes.Count();

                if (count > 0)
                {
                    if (mappingType != XmlMappingType.Element)
                    {
                        throw new ArgumentException("Known types may be set only for XML Element.", "knownTypes");
                    }

                    if (isFinalType)
                    {
                        throw new ArgumentException("Known types cannot be set for final value type.", "knownTypes");
                    }

                    this.knownTypes = new List <XmlKnownType>(count);

                    foreach (var knownType in knownTypes)
                    {
                        if (valueType == knownType.valueType)
                        {
                            throw new ArgumentException(string.Format("Known type \"{0}\" cannot be equal to the value type.", valueType), "knownTypes");
                        }

                        if (!valueType.IsAssignableFrom(knownType.ValueType))
                        {
                            throw new ArgumentException(string.Format("Known type \"{0}\" must be inherits from \"{1}\".", knownType.ValueType, valueType), "knownTypes");
                        }

                        this.knownTypes.Add(knownType);
                    }
                }
            }
        }