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