我正在从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工具中的一个错误。
答案 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
我还没有尝试,但我即将。