我在某些端点上的Swashbuckle Swagger UI出现冻结问题。这似乎是循环引用的问题。经过一些研究后,我仍然无法找到修复方法。
我发现这个问题,这是类似于我的问题,虽然我的是不是崩溃,只是冻结-Swagger crashes with circular model references。
举例说明:
public class ObjectA
{
public Guid Id { get; set; }
// ...some other properties, up to 100 columns in some cases
public virtual List<ObjectB> Foo { get; set; }
}
public class ObjectB
{
public Guid Id { get; set; }
public Guid RefId { get; set; }
// ...some other properties, up to 100 columns in some cases
public virtual ObjectA RefObj { get; set; }
}
删除上述任何一个类中的属性都不是一个选项,因为这是暴露所有链接实体所必需的。我也不想创建ObjectBsObjectA
自定义类,它只包含没有循环引用的属性,因为这意味着我必须为ObjectB
的每个循环引用创建一个。
我的想法是在序列化ObjectA
时排除ObjectA.Foo
的ObjectA
属性:
ObjectA {
Id: 'objAId',
//... other properties
Foo: [
{
Id: 'someObjectBId',
RefId: 'objAId',
//... other properties of ObjectB
RefObj: null
}
]
}
我试着搜索,但是在网上什么都找不到。我也试过protected
,protected internal
,但是这些完全排除了所有的属性,甚至在主类中。
可能是过滤器属性之类的东西,例如:
public class ObjectA
{
public Guid Id { get; set; }
// ...some other properties, up to 100 columns in some cases
[DoNotInclude("RefObj")]
public virtual List<ObjectB> Foo { get; set; }
}
public class ObjectB
{
public Guid Id { get; set; }
public Guid RefId { get; set; }
// ...some other properties, up to 100 columns in some cases
[DoNotInclude("Foo")]
public virtual ObjectA RefObj { get; set; }
}
1条答案
按热度按时间yacmzcpb1#
虽然您可以从序列化中排除具有相应属性的属性(
JsonIgnoreAttribute
对应于System.Text.Json
,一个同名的属性对应于Newtonsoft Json.NET,请根据序列化使用的属性选择正确的属性,System.Text.Json
现在是默认属性):看起来你试图重用你的EF实体来作为API模型--一般情况下我建议不要这样做。创建特殊的类来作为入站和出站模型(DTO),并将它们Map到数据库实体(你可以使用现有的Map器库来减少代码量,AutoMapper,Mapster,mapperly和其他)。