Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从swagger响应中排除ef虚拟属性_C#_Swagger_Asp.net Core Webapi_Swashbuckle - Fatal编程技术网

C# 从swagger响应中排除ef虚拟属性

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

我使用ef core将Swashback添加到.net core web api项目中。 我的问题是,ef自动生成类的虚拟属性被添加到了swagger示例响应中,这使得响应变得巨大,我只想显示表属性,而不是关系

来自控制器的代码示例:

[gettpname=httpdevices] 公共异步任务设备 { var devices=wait_deviceDa.GetDevices; 返回Jsondevices; } 我的问题是ef自动生成的类位于一个单独的类库中,我无权更改它。我不能简单地将JsonIgnore添加到这些虚拟属性中


是否可以让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端点。