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

如何从XSD生成带显式数值的C#枚举解决xsd.exe值错乱问题

解决方案

针对xsd.exe无法读取XSD中ser:EnumerationValue节点自动生成带赋值枚举的问题,有3种可实现全自动化、无需手动修改生成代码的方案:

方案1:使用T4模板自定义生成逻辑

这是灵活度最高的方案,完全可以按照你的需求输出代码格式,无需依赖第三方工具:

  1. 在项目中新建T4文本模板,引入System.Xml.Linq等必要命名空间
  2. 编写模板逻辑读取XSD文件,解析每个枚举类型下的xs:enumeration节点,同时提取xs:appinfo下的EnumerationValue数值
  3. 按照你需要的格式输出枚举代码,包括XmlTypeAttribute等特性、枚举项注释、对应数值赋值
  4. 后续XSD更新时,只需右键执行T4模板的「运行自定义工具」即可重新生成最新代码

方案2:对xsd.exe生成结果做自动后处理

可以复用你现有的xsd.exe生成流程,改造成本最低:

  1. 保留原有的xsd.exe /namespace:Demo /language:cs /c demo.xsd生成命令
  2. 编写一个简单的PowerShell脚本或C#控制台工具,逻辑如下:
    • 读取XSD文件,生成「枚举项名称-对应数值」的映射表
    • 读取xsd.exe生成的cs文件,遍历枚举项,给每个有对应数值的项拼接= 数值的赋值语句
  3. 将「执行xsd.exe」+「执行后处理脚本」两步整合成一个批处理命令,后续XSD变更只需运行一次批处理即可得到符合要求的代码

方案3:更换支持ser:EnumerationValue的代码生成工具

xsd.exe本身设计时就没有处理appinfo下的EnumerationValue节点(该节点是为WCF序列化设计的),你可以换用原生支持该特性的生成工具:
比如开源的XsdCodeGen、商业工具XSD2Code,这类工具可以直接识别XSD中的EnumerationValue定义,自动生成带赋值的枚举,无需额外开发,操作最简单。

补充说明

如果你的枚举值存在不需要显式赋值的项(比如示例中的none),可以在生成逻辑中判断如果没有对应的EnumerationValue节点就不追加赋值语句,完全匹配你给出的预期生成结果。

内容的提问来源于stack exchange,提问作者Marius Bancila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:27:01