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