gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:17 26 4
gpt4 key购买 nike

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

来自 Controller 的代码示例:

[HttpGet("devices", Name = "GetDevices")]
public async Task<ActionResult<List<Device>>> Devices()
{
var devices = await _deviceDa.GetDevices();
return Json(devices);
}

我的问题是 ef 自动生成的类在一个单独的类库中,我无权更改。我不能简单地将 JsonIgnore 添加到这些虚拟属性。

是否可以让 Swashbuckle 忽略所有虚拟属性?

最佳答案

您可以实现自己的 ContractResolver 以在序列化模型时忽略虚拟属性。

  1. 忽略虚拟合约解析器

    public class IgnoreVirtualContractResolver: DefaultContractResolver
    {
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
    JsonProperty prop = base.CreateProperty(member, memberSerialization);
    var propInfo = member as PropertyInfo;
    if (propInfo != null)
    {
    if (propInfo.GetMethod.IsVirtual && !propInfo.GetMethod.IsFinal)
    {
    prop.ShouldSerialize = obj => false;
    }
    }
    return prop;
    }
    }
  2. 注册

    services.AddMvc()
    .AddJsonOptions(options => {
    options.SerializerSettings.ContractResolver = new IgnoreVirtualContractResolver();
    }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

关于c# - 从 swagger 响应中排除 ef 虚拟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56888715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com