c# - 如何将 xsd 转换为具有冗余的 cs? (OTA XML 出版物)

标签 c# soap xsd code-generation redundancy

我正在尝试创建一个基于 SOAP 1.2 的 C#/WCF 接口(interface),它应该处理 HTNG/OTA 消息。 (酒店通信标准)

可在此处找到此 OTA 标准的发布:Open Travel Alliance - Specifications

此出版物包含一堆 .xsd 文件,这些文件定义了可以通过此类接口(interface)传递的所有类型。例如,要将新预订转移到酒店/系统,您可以使用 OTA_HotelResNotifRQ 消息,该消息可以包含 HotelReservations。 SOAP XML 看起来像这样:

<soapenv:Body>
  <OTA_HotelResNotifRQ EchoToken="1474033560.151702" TimeStamp="2016-09-16T06:46:00-08:00" Version="1.001" xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opentravel.org/OTA/2003/05 NeedToGetThisPathFromIdeas/OTA_HotelResNotifRQ.xsd" ResStatus="Modify">
    <POS>
    ...
    </POS>
    <HotelReservations>
      <HotelReservation CreateDateTime="2015-11-15T10:39:01-08:00" ResStatus="Reserved" LastModifyDateTime="2016-09-16T06:46:00-08:00">
        <UniqueID Type="14" ID="133121274"/>
        <RoomStays>
          <RoomStay MarketCode="Other OTA" SourceOfBusiness="OTA">
          ...
          </RoomStay>
        </RoomStays>
      </HotelReservation>
    </HotelReservations>
  </OTA_HotelResNotifRQ>
</soapenv:Body>

问题是有多个消息,因此有多个 .xsd 定义使用相同的元素/类。例如,对于上面提到的 HotelReservations,所有标记的消息都使用它:

enter image description here

所有这些 .xsd 文件都定义了相同的类,如 HotelReservation 或 RoomStay 等,并且还有一个额外的 .xsd(HotelReservation,它不是 RQ 或 RS)定义了这些消息中使用的类型。我的意思是这些模式定义非常非常多余。

当我尝试使用 .NET Framework 中的 xsd.exe 或 WSCF.Blue 从这些文件生成 .cs 类时,我面临着所有重复的类型,例如 HotelReservationType 将由OTA_HotelResRQ.cs,再由 OTA.HotelResNotifRQ.cs,再由 etc。这当然会导致无用的代码和 Visual Studio 疯狂地到处喊“模棱两可的引用”。

如何将这些 .xsd 定义无冗余地转换为 .cs 类,所有类型只定义一次?有没有可以做到这一点的工具,或者 Open Travel Alliance 真的搞砸了他们的出版物,我几乎被搞砸了?

最佳答案

您需要创建一个包含/导入所有您需要的架构文件,然后从中生成代码,查看 Working with multiple XML schemas .

另请查看 Liquid XML Data Binder如果 xsd.exe 没有产生您想要的那种输出。

关于c# - 如何将 xsd 转换为具有冗余的 cs? (OTA XML 出版物),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47229423/

相关文章:

python - Spyne:输入参数具有不同命名空间的请求

java - BigDecimal 在 soap 消息中有科学记数法

java - 使用免费 XML validator 验证 XML w.r.t XSD 的最佳方法是什么?

java - java 9 上的 jaxb2-maven-plugin 失败

c# - 如何将自定义数据传递给反序列化函数

c# - 使用 C#.Net : 仅显示 CheckBoxList 中的选中项

c# - 检测 WPF Canvas 上两个矩形之间的碰撞

c# - 如何提交表单然后在完成时调用 jquery 函数而不重定向 MVC/C#/Jquery

java - 尝试构建正确的 SOAP 请求

php - WSDL SoapClient 和 PHP + 自己的命名空间