protected override void VisitListValue( ListValueNode node, ConverterContext context) { if (context.InputType.IsListType()) { ListType listType = context.InputType.ListType(); Type tempType = listType.ToClrType(); IList temp = (IList)Activator.CreateInstance(tempType); for (int i = 0; i < node.Items.Count; i++) { var valueContext = new ConverterContext(); valueContext.InputType = (IInputType)listType.ElementType; valueContext.ClrType = listType.ElementType.ToClrType(); VisitValue(node.Items[i], valueContext); temp.Add(valueContext.Object); } Type expectedType = context.ClrType == typeof(object) ? typeof(List <object>) : context.ClrType; context.Object = expectedType.IsAssignableFrom(tempType) ? temp : _converter.Convert(tempType, expectedType, temp); } }