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

C#如何将两个不同XSD文件中的多个相同类合并为单个类

ISO 20022 camt.053/camt.054 同命名空间复用类型方案

完全可以实现同命名空间下的类型复用,核心逻辑是抽离两个XSD的公共定义做共享依赖,避免重复生成类,具体操作如下:

操作步骤

  • 抽离公共类型定义
    对比camt.053、camt.054的原始XSD文件,将220个结构、约束、命名完全一致的简单/复杂类型全部提取出来,单独存为公共schema文件(比如命名为camt-shared.xsd),给该公共schema设置你项目需要的统一目标命名空间即可,提取过程不要修改类型的字段顺序、数据约束、命名,保证和原始ISO定义完全一致。
  • 改造两个消息的专属XSD
    删除camt.053.xsd、camt.054.xsd中已经抽离到公共schema的重复类型定义,仅保留两个消息各自独有的类型(比如各自的根节点结构、差异化字段对应的专属类型);在两个专属XSD的头部添加对公共schema的import引用,同时将两个专属XSD的目标命名空间设置为和公共schema完全一致的统一命名空间。
    注意两个消息的根节点通常都命名为Document,可以在改造时直接给根节点类型加消息类型后缀做区分,比如camt.053的根类型命名为Document053、camt.054的根类型命名为Document054,避免同命名空间下的根类型重名冲突。
  • 统一生成实体类代码
    不要分开单独编译两个消息的XSD,将公共schema、改造后的两个消息专属schema放在同一编译队列中,使用你项目对应的XML代码生成工具(xsd.exe、xjc、XmlSchemaClassGenerator等),指定目标XML命名空间映射到项目中同一个代码命名空间,工具会自动识别公共类型仅生成一次实体类,两个消息的专属类型单独生成,所有公共类型直接复用,不会产生冗余代码。

注意事项

  • 两个消息中约20个非完全一致的类型,哪怕命名相同也不要抽到公共schema中,留在各自的专属XSD定义里,同样加消息后缀做类名区分,避免同命名空间下的类型冲突。
  • 序列化、反序列化操作时,只需要在初始化序列化器时指定对应的消息根类型即可,针对公共字段的处理逻辑可以完全通用,不需要为两类消息分别写重复的处理代码。
  • 不要直接修改原始XSD的命名空间而不抽离公共类型,否则代码生成阶段会报同命名空间下类型重复定义的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:01:18