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