C# 从swagger响应中排除ef虚拟属性
我使用ef core将Swashback添加到.net core web api项目中。 我的问题是,ef自动生成类的虚拟属性被添加到了swagger示例响应中,这使得响应变得巨大,我只想显示表属性,而不是关系 来自控制器的代码示例: [gettpname=httpdevices] 公共异步任务设备 { var devices=wait_deviceDa.GetDevices; 返回Jsondevices; } 我的问题是ef自动生成的类位于一个单独的类库中,我无权更改它。我不能简单地将JsonIgnore添加到这些虚拟属性中C# 从swagger响应中排除ef虚拟属性,c#,swagger,asp.net-core-webapi,swashbuckle,C#,Swagger,Asp.net Core Webapi,Swashbuckle,我使用ef core将Swashback添加到.net core web api项目中。 我的问题是,ef自动生成类的虚拟属性被添加到了swagger示例响应中,这使得响应变得巨大,我只想显示表属性,而不是关系 来自控制器的代码示例: [gettpname=httpdevices] 公共异步任务设备 { var devices=wait_deviceDa.GetDevices; 返回Jsondevices; } 我的问题是ef自动生成的类位于一个单独的类库中,我无权更改它。我不能简单地将Json
是否可以让Swashback忽略所有虚拟属性?您可以使用视图模型而不是原始模型,并将要显示的字段放在视图模型中。
将视图模型发送到客户端,而不是原始模型。您可以使用视图模型而不是原始模型,并将要显示的字段放置在视图模型中。
将视图模型发送到客户端,而不是原始模型。您可以实现自己的ContractResolver,在序列化模型时忽略虚拟属性 IgnoreVirtualContractResolver 登记册
services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.ContractResolver = new IgnoreVirtualContractResolver();
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
您可以实现自己的ContractResolver,以便在序列化模型时忽略虚拟属性 IgnoreVirtualContractResolver 登记册
services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.ContractResolver = new IgnoreVirtualContractResolver();
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
我想到了两种可能性: 首先使用automapper映射到您的POCO。问题是,您需要pocos,但另一方面,您可以在以后获得所需的大量控制权
或者您可以直接使用ODATA,它基本上解决了您的问题,并为您提供免费的查询功能。想到两种可能性: 首先使用automapper映射到您的POCO。问题是,您需要pocos,但另一方面,您可以在以后获得所需的大量控制权
或者您可以直接使用ODATA,它基本上解决了您的问题,并为您提供免费查询功能。如果您使用ViewModels怎么办?看起来您正在返回对象本身,这不是一个好的做法,您应该始终返回一个DTO数据传输对象。然后,您可以在DTO上设置要返回的属性。这在microservice体系结构上运行,这个特定的服务只是SQL数据库的rest接口,然后还有一个附加的microservice,它可以为用户表提供各种DTO端点。例如,如果您使用ViewModels呢?看起来您正在返回对象本身,这不是一个好的做法,您应该始终返回一个DTO数据传输对象。然后在DTO上,您可以设置要返回的属性。这在微服务体系结构上运行,这个特定的服务只是SQL数据库的rest接口,然后还有一个附加的微服务,可以为用户表提供各种DTO端点。