private void VisitCore(ArraySchema s)
        {
            if (s.RuntimeType == typeof(Array))
            {
                s.Serializer = new ArraySerializer(s);
            }
            else if (s.RuntimeType.IsArray)
            {
                s.Serializer = new ArraySerializer(s);
                if (s.RuntimeType.GetArrayRank() != 1)
                {
                    s.Serializer = new MultidimensionalArraySerializer(s);
                }
            }
            else
            {
                Type listType =
                    s.RuntimeType.GetAllInterfaces().SingleOrDefault(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IList<>));

                Type enumerableType =
                    s.RuntimeType.GetAllInterfaces().SingleOrDefault(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IEnumerable<>));

                if (listType != null)
                {
                    s.Serializer = new ListSerializer(s);
                }
                else if (enumerableType != null)
                {
                    s.Serializer = new EnumerableSerializer(s);
                }
            }
            this.VisitDynamic(s.ItemSchema);
        }
 private TypeSchema BuildCore(ArraySchema w, ArraySchema r)
 {
     TypeSchema itemSchema = this.BuildDynamic(w.ItemSchema, r.ItemSchema);
     return itemSchema != null
         ? new ArraySchema(itemSchema, r.RuntimeType)
         : null;
 }