You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过NSwag从OpenAPI规范生成带计算属性的C#客户端代码

NSwag生成C#计算只读属性的解决方案

方案一:OpenAPI扩展字段 + 自定义NSwag模板

先在OpenAPI规范里给目标属性加自定义扩展字段,标记它是计算属性并定义逻辑:

components:
  schemas:
    YourModel:
      type: object
      properties:
        Id1:
          type: string
        Id2:
          type: string
        Id3:
          type: string
        Id:
          type: string
          readOnly: true
          x-calculated-property:
            expression: "Id1 + Id2 + Id3"

然后修改NSwag的C#类模板(通常是Class.tt),在生成属性的逻辑里加入对这个扩展字段的判断:

foreach (var property in Properties) {
    if (property.ExtensionData.ContainsKey("x-calculated-property")) {
        var calcExpr = ((JObject)property.ExtensionData["x-calculated-property"])["expression"].ToString();
#>
    public string <#= property.Name #> {
        get {
            return <#= calcExpr #>;
        }
    }
<#+
    } else {
        // 保留原有的普通属性生成逻辑
    }
}

注意:模板里需要引用Newtonsoft.Json.Linq来解析扩展字段的JSON数据。

方案二:C#部分类扩展

这是最省心的方案——NSwag生成的类默认是partial类,直接在同一个命名空间下新建一个部分类文件,手动添加计算属性:

// 手动创建的YourModel.partial.cs
namespace YourNamespace {
    public partial class YourModel {
        public string Id {
            get {
                return Id1 + Id2 + Id3;
            }
        }
    }
}

后续重新生成NSwag代码时,不会覆盖这个手动添加的部分类,计算属性逻辑可以独立维护。唯一缺点是这个属性不会出现在OpenAPI文档里,如果需要对外暴露文档的话不适用。

方案三:生成后代码注入

用NSwag的post-process机制,在代码生成完成后自动插入计算属性。比如写个PowerShell脚本:

# inject-calculated-property.ps1
$file = "生成的YourModel.cs文件路径"
$code = Get-Content $file -Raw
$calcProperty = @"
        public string Id {
            get {
                return Id1 + Id2 + Id3;
            }
        }
"@
$updatedCode = $code.Replace("}", "$calcProperty`r`n}")
Set-Content $file $updatedCode

然后在NSwag配置文件(nswag.json)里指定这个脚本:

{
  "codeGenerators": {
    "csharp": {
      "postProcess": "powershell.exe -ExecutionPolicy Bypass -File inject-calculated-property.ps1"
    }
  }
}

这种方式适合批量处理多个类,但要注意脚本需要适配生成代码的结构,一旦NSwag生成的代码格式变化,脚本可能失效。

内容的提问来源于stack exchange,提问作者Kevin James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:02:25