c# - 修改 XML 模式时如何管理 ItemChoiceType 枚举的更改?

标签 c# .net xml xml-serialization xsd.exe

我们使用 XSD.EXE 从用于 XML 序列化的 XSD 模式生成运行时类。模式很大,包含许多复杂的类型和选择元素。如 http://msdn.microsoft.com/en-us/magazine/cc164135.aspx 中所述, choice 元素生成两个字段:一个用于保存值的 Item 字段和一个 ItemChoiceType 字段,它保存一个生成的枚举,定义 Item 字段中的命名元素。

XSD 为每个名为 ItemChoiceTypeXX 的元素名称字段创建一个唯一的枚举,其中 XX 是一个整数。 XSD 根据需要创建尽可能多的这些 ItemChoiceTypes 并用递增的数字命名它们。

所以,我的模式的一小部分看起来像:

<xsd:choice>
  <xsd:element ref = "Sequence"/>
  <xsd:element ref = "HandshakeId"/>
</xsd:choice>

我可以像使用生成的类一样对其进行编码,例如:

job.Item = "123";        
job.ItemElementName = ItemChoiceType26.Sequence;

问题在于,在最初生成的类中,此元素的 ItemChoiceType 是 ItemChoiceType26。更新架构并重新生成类后,名称现在为 ItemChoiceType27。

我的问题是随着模式的更新和修订,我该如何管理它?我不控制 XSD 架构,它由供应商提供。但是,我必须更新我的代码以匹配他们所做的更改。随着时间的推移,这似乎是我面临的一场维护噩梦,我希望得到任何建议来更好地管理它。

最佳答案

我认为正确的答案是使用 name 属性代替 ref

<xsd:choice>
  <xsd:element name="Sequence"/>
  <xsd:element name="HandshakeId"/>
</xsd:choice>

至少这对我有用。

关于c# - 修改 XML 模式时如何管理 ItemChoiceType 枚举的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13236252/

相关文章:

c# - 有很多枚举值有什么坏处吗? (许多 >= 1000)

c# - 使用反射 (DotNET) 在程序集中查找所有命名空间

c# - 处置公共(public)数据集

c# - 使用 XmlWriter 附加到 XML 文件

c# - 恢复文本框 C# 的上一个条目

C# "ref"没有做我认为应该做的事

c# - 如何将 List<object> 转换为 Json 格式并在 C# 中填充 <tbody>?

c# - 防止Winform最大化?

xml - xslt 应用具有相同父节点的模板

php - 在 DOMDocument->load() 上捕获 404 错误