示例#1
0
        public object FromXml(XStreamReader reader, UnmarshallingContext context)
        {
            IList result = (IList)DynamicInstanceBuilder.CreateInstance(Type.GetType(reader.GetAttribute(LIST_TYPE)));
            int   count  = reader.NoOfChildren();

            reader.MoveDown();
            for (int i = 0; i < count; i++)
            {
                result.Add(context.ConvertAnother());
                reader.MoveNext();
            }
            reader.MoveUp();
            return(result);
        }
示例#2
0
        public object FromXml(XStreamReader reader, UnmarshallingContext context)
        {
            IList result = (IList)DynamicInstanceBuilder.CreateInstance(context.currentTargetType);

            Type elementType = null;

            if (context.currentTargetType.HasElementType)
            {
                elementType = context.currentTargetType.GetElementType();
            }
            else if (context.currentTargetType.IsGenericType)
            {
                elementType = context.currentTargetType.GenericTypeArguments[0];
            }
            else
            {
                throw new Exception("Unable to get element type for: " + context.currentTargetType.ToString());
            }

            int count = reader.NoOfChildren();

            if (reader.MoveDown() && count > 0)
            {
                Type previousType = context.currentTargetType;
                context.currentTargetType = elementType;

                for (int i = 0; i < count; i++)
                {
                    result.Add(context.ConvertAnother(elementType));
                    Debug.Assert(reader.MoveNext() || result.Count == count);
                }
                reader.MoveUp();

                context.currentTargetType = previousType;
            }

            return(result);
        }
示例#3
0
        /// <summary>
        /// Converts the XmlNode data passed in back to an actual
        /// .NET instance object.
        /// </summary>
        /// <returns>Object created from the XML.</returns>
        public object FromXml(object parent, FieldInfo field, Type type, XmlNode xml, IMarshalContext context)
        {
            object value;

            if (xml.Attributes["ref"] != null)
            {
                int stackIx = int.Parse(xml.Attributes["ref"].Value);
                value = context.GetStackObject(stackIx);
            }
            else
            {
                try
                {
                    // Check if there is a parameterless constructor
                    if (type.IsValueType || type.GetConstructor(__flags, null, new Type[0], null) != null)
                    {
                        value = Activator.CreateInstance(type, true);
                    }
                    else
                    {
                        value = DynamicInstanceBuilder.GetDynamicInstance(type);
                    }
                }
                catch (Exception e)
                {
                    throw new ConversionException("Error constructing type: " + type, e);
                }

                // Add the object to the stack
                context.Stack(value, type, xml);

                // Create a map of all fields
                FromXmlAs(context, type, value, xml);
            }
            return(value);
        }
示例#4
0
 protected override IDictionary EmptyDictionary(XStreamReader reader)
 {
     return((IDictionary)DynamicInstanceBuilder.CreateInstance(Type.GetType(reader.GetAttribute(Attributes.classType))));
 }
        protected override IDictionary EmptyDictionary(XStreamReader reader, UnmarshallingContext context)
        {
            return((IDictionary)DynamicInstanceBuilder.CreateInstance(context.currentTargetType));

            return((IDictionary)DynamicInstanceBuilder.CreateInstance(Type.GetType(reader.GetAttribute(Attributes.classType))));
        }