使用SWAGGER在Web API文档中不调用ShouldSerialize *方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SWAGGER在Web API文档中不调用ShouldSerialize *方法相关的知识,希望对你有一定的参考价值。

我正在使用Swagger for Web API文档。在我的Web API中,我有如下实体:

public class BaseEntity
{
    public string BaseEntProp1{get;set;}
    public string BaseEntProp2{get;set;}

    public virtual bool ShouldSerializeBaseEntProp1()
    {
         return true;
    }

    public virtual bool ShouldSerializeBaseEntProp1()
    {
         return true;
    }
}

public class DerivedEntity1 : BaseEntity
{
    [JsonIgnore]
    public string DerEntProp1{get;set;}

    public string DerEntProp2{get;set;}

    public override bool ShouldSerializeBaseEntProp1()
    {
         return false;
    }

    public override bool ShouldSerializeBaseEntProp1()
    {
         return false;
    }
}

我使用DerivedEntity1作为Web API方法的输入参数,并生成了swagger文档。

在此之前它很好,但问题是,该文档中的DerivedEntity1 JSON字符串显示了应该被排除的BaseEntProp1和BaseEntProp2。有人可以帮助我如何排除这些?

注意:1。DerivedEntity1的DerEntProp1属性被正确排除。 2.只是为了确认,在生成文档后的启动方法中,我有以下硬编码:

    var temp = new DerivedEntity1 { 
                   BaseEntProp1 = "should be ignored", 
                   BaseEntProp2 = "this also should be ignored"};

    string tempJson = JsonConvert.SerializeObject(temp); 

上面的测试通过,即tempJson没有BaseEntProp1和BaseEntProp2。所以,我怀疑SWAGGER无法调用正确的ShouldSerialize *方法。任何帮助都非常感谢。

谢谢

答案

最后,我以不同的方式解决了它,因为问题与Swagger无关。

我已经创建了具有虚拟属性的基本抽象类。在派生类中,我重载了这些属性并用JsonIgnore属性修饰。这解决了我的问题。

以上是关于使用SWAGGER在Web API文档中不调用ShouldSerialize *方法的主要内容,如果未能解决你的问题,请参考以下文章

Swagger 在 OWIN Startup Web API C# 中不起作用

使用swagger实现web api在线接口文档

Vue 使用typescript, 优雅的调用swagger API

Core Web API上使用Swagger提供API文档

API接口文档利器:Swagger

Spring Boot2 系列教程 | 集成 Swagger2 构建强大的 RESTful API 文档