using Microsoft.OpenApi.Any;
|
using Microsoft.OpenApi.Models;
|
using Swashbuckle.AspNetCore.SwaggerGen;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace FlexJobApi.Core
|
{
|
public class EnumSchemaFilter : ISchemaFilter
|
{
|
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
|
{
|
if (context.Type.IsEnum)
|
{
|
// 枚举类型的描述(来自枚举本身的注释)
|
schema.Description ??= GetEnumDescription(context.Type);
|
}
|
}
|
|
// 获取枚举类型的注释
|
private string GetEnumDescription(Type enumType)
|
{
|
var xmlDoc = XmlDocUtils.GetXmlDocAsync().Result;
|
var member = XmlDocUtils.GetXmlDocMemberAsync(enumType, xmlDoc).Result;
|
var description = member?.Summary ?? "";
|
foreach (var enumValue in Enum.GetValues(enumType))
|
{
|
var enumMember = enumType.GetMember(enumValue.ToString()).First();
|
var enumXmlDocMember = XmlDocUtils.GetXmlDocMemberAsync(enumMember, xmlDoc).Result;
|
description += $"{enumValue}-{enumXmlDocMember?.Summary} ";
|
}
|
return description;
|
}
|
}
|
}
|