首页 > 解决方案 > 更改 Swagger 属性名称

问题描述

Q. 1 我正在尝试将实体推入 CRM。json 看起来像这样:

{
    "sub_AssignedToCompanyId@odata.bind": "/accounts(f52f9dd7-35e5-e711-813b-480fcff40721)"

}

现在,我的 C# 类上有一个名为 AssignedToCompany 的属性,如下所示:

[JsonProperty(PropertyName = "sub_AssignedToCompanyId@odata.bind")]
public int AssignedToCompany{ get; set; }

我想要的是一种将它序列化为 sub_AssignedToCompanyId@odata.bind 的方法(我已经使用 JsonProperty("sub_AssignedToCompanyId@odata.bind") 完成了。但是那么招摇定义看起来不太好。我想要招摇定义这个属性说“assignedToCompanyId”。有没有办法做到这一点?我正在使用.Net Framework Web API。

Q.2 而且,有没有办法可以翻译这个输入:f52f9dd7-35e5-e711-813b-480fcff40721

对此输出:/accounts(f52f9dd7-35e5-e711-813b-480fcff40721)

在序列化过程中自动?

标签: c#jsonswagger

解决方案


您可以使用IOperationFilter或。哪个最适合您的需求。ISchemaFilterIDocumentFilter

一个例子ISchemaFilter可以是:

public class ODataTypeSchemaFilter : ISchemaFilter
{
   private const string propToRename = "sub_AssignedToCompanyId@odata.bind";

   public void Apply(Schema schema, SchemaRegistry schemaRegistry, Type, type)
   {
      if (type == typeof(MyObject))
      {
         // adding new schema property, and removing the old one
         schema.properties.Add(nameof(MyObject.AssignedToCompany), schema.properties[propToRename]);
         schema.properties.Remove(propToRename);
      }
   }
}

public class MyObject
{
   [JsonProperty(PropertyName = "sub_AssignedToCompanyId@odata.bind")]
   public int AssignedToCompany { get; set; }
}

这是一个强大的功能,如果操作不当,更改架构可能会导致其他问题。有关更多信息,请参阅 Swagger 文档。根据我的经验,我已经使用了所有这三个,只需找到最适合您需求的。


推荐阅读