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); }
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); }
/// <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); }
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)))); }