Asp.net 在模型中重命名数据类型

Asp.net 在模型中重命名数据类型,asp.net,asp.net-web-api,swagger,swagger-ui,swashbuckle,Asp.net,Asp.net Web Api,Swagger,Swagger Ui,Swashbuckle,我正在组装一个需要匹配外部源XML格式的web API,并希望在swagger输出中重命名数据类型对象 它在类的成员上运行良好,但我想知道是否也可以重写类名 例如: [DataContract(Name="OVERRIDECLASSNAME")] public class TestItem { [DataMember(Name="OVERRIDETHIS")] public string toOverride {get; set;} } 在生成的输出中,我最终看到 型号: 我希望看

我正在组装一个需要匹配外部源XML格式的web API,并希望在swagger输出中重命名数据类型对象

它在类的成员上运行良好,但我想知道是否也可以重写类名

例如:

[DataContract(Name="OVERRIDECLASSNAME")]
public class TestItem
{
   [DataMember(Name="OVERRIDETHIS")]
   public string toOverride {get; set;}
}
在生成的输出中,我最终看到 型号:

我希望看到

重写类名{ 重写此项(字符串,可选) }

这可能吗


谢谢,

我也有同样的问题,我想我现在解决了

首先,在Swagger配置中添加SchemaId(从版本5.2.2开始,请参阅):

然后添加此方法:

private static string schemaIdStrategy(Type currentClass)
{
    string returnedValue = currentClass.Name;
    foreach (var customAttributeData in currentClass.CustomAttributes)
    {
        if (customAttributeData.AttributeType.Name.ToLower() == "datacontractattribute")
        {
            foreach (var argument in customAttributeData.NamedArguments)
            {
                if (argument.MemberName.ToLower() == "name")
                {
                    returnedValue = argument.TypedValue.Value.ToString();
                }
            }
        }
    }
    return returnedValue;
}

希望有帮助。

这是一个很老的问题,但当我在寻找类似的解决方案时,我遇到了这个问题。 我认为文森特答案中的密码可能不起作用。 以下是我对它的看法:

    private static string schemaIdStrategy(Type currentClass)
    {
        var dataContractAttribute = currentClass.GetCustomAttribute<DataContractAttribute>();
        return dataContractAttribute != null && dataContractAttribute.Name != null ? dataContractAttribute.Name : currentClass.Name;
    }
私有静态字符串schemaIdStrategy(类型currentClass)
{
var dataContractAttribute=currentClass.GetCustomAttribute();
返回dataContractAttribute!=null&&dataContractAttribute.Name!=null?dataContractAttribute.Name:currentClass.Name;
}

添加到线程中,因为我无法使用AspNetCore的Swashbukle的答案。 我正在这样做。然而,我并不完全高兴,因为如果该对象包含在另一个对象中,那么它将显示其原始名称。例如,如果您有一个分页的结果集,则结果显示不正确。因此,这不是最终答案,但可能适用于简单的用例

我使用的是模式过滤器。当我获取数据类型的Title属性时,对象只有[JsonObject(Title=“CustomName”)]。 首先定义如下所示的类:

public class CustomNameSchema : ISchemaFilter
    {
        public void Apply(Schema schema, SchemaFilterContext context)
        {
            if (schema?.Properties == null)
            {
                return;
            }

            var objAttribute = context.SystemType.GetCustomAttribute<JsonObjectAttribute>();
            if( objAttribute!= default && objAttribute?.Title?.Length > 0)
            {
                schema.Title = objAttribute.Title;
            }
        }
    }
public类CustomNameSchema:ISchemaFilter
{
public void Apply(架构、SchemaFilterContext上下文)
{
if(schema?.Properties==null)
{
返回;
}
var objAttribute=context.SystemType.GetCustomAttribute();
if(objAttribute!=默认值和&objAttribute?.Title?.Length>0)
{
schema.Title=objAttribute.Title;
}
}
}
启动时,必须配置SchemaFilter

c.SchemaFilter<CustomNameSchema>();
c.SchemaFilter();

ASP.NET Core的Swashback 6有什么方法可以做到这一点?
public class CustomNameSchema : ISchemaFilter
    {
        public void Apply(Schema schema, SchemaFilterContext context)
        {
            if (schema?.Properties == null)
            {
                return;
            }

            var objAttribute = context.SystemType.GetCustomAttribute<JsonObjectAttribute>();
            if( objAttribute!= default && objAttribute?.Title?.Length > 0)
            {
                schema.Title = objAttribute.Title;
            }
        }
    }
c.SchemaFilter<CustomNameSchema>();