Вот взлом, который, кажется, "исправить" это. Я добавил это к своему SwaggerConfig.cs
c.MapType<MasterModel>(() => new Schema { type = "integer", format = "int32" });
c.MapType<MasterLocationModel>(() => new Schema { type = "integer", format = "int32" });
c.MapType<LocationModel>(() => new Schema { type = "integer", format = "int32" });
У меня есть намного больше типов, но эти три являются центральными, поэтому сопоставление их с целым числом ограничивает рекурсию до разумных уровней. Это также делает неправильную страницу чванства, но, по крайней мере, она загружается!
Возможно, есть способ сделать это лучше, используя SchemaFilter
? Любая помощь будет оценена.
EDIT:
В конце концов, мы решили разделить наши классы так, чтобы свагер не мог видеть ссылки глубже, чем на один уровень. Например,
class A_Base {
int id;
}
class A : A_Base {
List<B_Base> Blist;
}
class B_Base {
int id;
}
class B : B_Base {
List<C_Base> Clist;
}
class C_Base {
int id;
}
class C : C_Base {
List<D_Base> Dlist;
}
и все наши API контроллеров используют типы A, B, C. Документ Swagger будет углубляться только на один уровень. Рекурсия не выходит из-под контроля. Также это более правильно, потому что объекты, возвращаемые нашим API, обычно имеют нулевой или один уровень глубины.