为什么有些生成的C#类属性与XSD属性不匹配?

时间:2009-11-25 16:26:37

标签: c# xsd xsd.exe

我正在从OTA(开放旅行联盟)XSD文件生成C#类。你可以download the XSD file from here

我在Visual Studio命令提示符中使用以下命令创建C#类:

xsd FS_OTA_VehLocDetailsNotifRQ.xsd /classes /nologo

OTA_VehLocDetailsNotifRQ.POS[0].RequestorID内,我希望找到一个ID属性。然而,XSD.exe工具生成的属性名为ID_Context

你能解释一下为什么会这样做,以及我是否能够强制它生成正确的(ID)属性名称?

请不要建议我编辑生成的文件,因为这不是一种可维护的方法。

接受答案后进一步修改:

更仔细地查看XSD并使用其属性组定义替换引用,可以在其属性组中看到ID属性:

<xs:attributeGroup name="UniqueID_Group">
  <xs:attribute name="URL" type="xs:anyURI" />
  <xs:attribute name="Type" type="OTA_CodeType" use="required" />
  <xs:attribute name="Instance" type="StringLength1to32" />
  <xs:attributeGroup name="ID_Group">
    <xs:attribute name="ID" type="StringLength1to32" use="required" />
  </xs:attributeGroup>
  <xs:attribute name="ID_Context" type="StringLength1to32" use="optional" />
</xs:attributeGroup>

我认为这是XSD工具中的一个错误。

2 个答案:

答案 0 :(得分:2)

让我们看看......

  • RequestorID包含UniqueID_Type
  • 类型的复杂内容
  • UniqueID_Type包含对一组名为UniqueID_Group
  • 的属性的引用
  • UniqueID_Group是一个属性组,包含以下属性:
    • URL
    • Type
    • Instance
    • ID_Group
    • 的引用
    • ID_Context

我猜C#代码“ID_Context”是由于该属性组中的“ID_COntext”属性生成的......我没有看到任何错误。

但我同意 - ID_Group应该包含“ID”属性,但似乎xsd.exe已删除对ID_Group的嵌套引用 - 无论出于何种原因......它确实出现成为其他人在其他场景中偶然发现的问题。看起来xsd.exe无法处理此任务: - (

也许还看一下这个讨论:

http://groups.google.com/group/OTA-Impl-Forum/browse_thread/thread/fa476cfb6e1fa7f7

更新:我也尝试过来自WCF的svcutil.exe(.NET 3.0及更高版本) - 没有运气: - (

  

错误:输入'DateOrTimeOrDateTimeType'   在命名空间   'http://www.opentravel.org/OTA/2003/05'   无法导入。 **的简单类型   不支持<union>个内容。   要么改变架构,要么   类型可以映射到数据协定类型   或使用ImportXmlTyp e或使用   不同的序列化器。

答案 1 :(得分:2)

有点晚了,但我想我可能找到了你问题的解决方案(现在也是我的问题):

http://www.opentravelcommunityforum.com/forum/viewtopic.php?f=8&t=19

我还没有尝试,但我即将。