chenxin's blog
[原创]-asp.net core System.Text.Json 多态模式下子类中的字段无法在swagger中生成问题解决方案
方法一:用 AllOf 组合父类和子类字段(推荐)

你可以通过 SchemaFilter 或 DocumentFilter 来强制生成子类字段。

public class InheritanceSchemaFilter : ISchemaFilter
{
   public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
    var type = context.Type;

    if (type.BaseType != null && (type.BaseType == typeof(ComponentBase) || type.BaseType.BaseType == typeof(ComponentBase)))
    {
        var baseSchema = context.SchemaGenerator.GenerateSchema(type.BaseType, context.SchemaRepository);

        // 通过 allOf 把父类和子类 schema 合并
        schema.AllOf = new List<OpenApiSchema>
        {
            baseSchema
        };

        // 把子类自己的字段也加进去
        foreach (var prop in type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly))
        {
            //传入prop(PropertyInfo)可以生成注释。
            schema.Properties[prop.Name] = context.SchemaGenerator.GenerateSchema(prop.PropertyType, context.SchemaRepository,prop);
        }
    }
}
}


注册:

services.AddSwaggerGen(c =>
{
    c.SchemaFilter<InheritanceSchemaFilter>();
});
非特殊说明,本文版权归 陈新 所有,转载请注明出处.
本文标题:asp.net core System.Text.Json 多态模式下子类中的字段无法在swagger中生成问题解决方案
(0)
(0)
微信扫一扫
支付宝扫一扫
写作不易,如果本文对你所有帮助,扫码请我喝杯饮料可以吗?
评论列表(0条)
还没有任何评论,快来发表你的看法吧!
{{item.userInfo.nickName}}{{item.userInfo.isBlogger?"(博主)":""}}
{{getUserType(item.userInfo.userType)}} {{formatCommentTime(item.commentDate)}}
回复
{{replyItem.userInfo.nickName}}{{replyItem.userInfo.isBlogger?"(博主)":""}}
@{{replyItem.reply.userInfo.nickName+":"}}
{{getUserType(replyItem.userInfo.userType)}} {{formatCommentTime(replyItem.commentDate)}}
回复
正在加载评论列表... 已经到底啦~~~
文章归档 网站地图 闽ICP备2020021271号-1 百度统计