代码之家  ›  专栏  ›  技术社区  ›  SteveC

如何处理WCF数据契约中的xs:any

  •  1
  • SteveC  · 技术社区  · 14 年前

    <DataFields> 可以是任何东西,例如。。。

    <Test1Root> 
      <CaseNo></CaseNo>
      <Activity></Activity>
      <DataFields>
         <AccountRef></AccountRef>
         <PropRef></PropRef>
         <User></User>
      </DataFields>
    </Test1Root>
    

    我在BizTalk中使用 <xs:any> < ...

    <xs:element name="DataFields">
      <xs:complexType>
        <xs:sequence>
          <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    

    但我很难理解如何在WCF中处理这个问题 [DataContract] ...

    xsd.exe文件 创建类,它们都提供了主元素(CaseNo、Activity等),但似乎都不能处理xs:any数据字段。。。

    • svcutil将数据字段作为xmlement
    • xsd将其作为一个类,但具有类型为xmlement[]的任意属性

    3 回复  |  直到 13 年前
        1
  •  2
  •   marc_s Hady Salah    14 年前

    好, xs:any 可以是任何对象,因此.NET工具所能做的最好的事情就是为您提供一个对象数组。。。。

    如果你真的需要的话 在您的XML模式中,并且不能用一组更具体的 xs:element (可能是相互继承的),我不明白你怎么能得到更好的支持。。。

        2
  •  0
  •   SteveC    13 年前

    你能做到的。我在一次服务中做过很多次。我没有做过很多WCF服务,但我相信他们的工作方式是一样的。这个 <xs:any> 在模式中转换为代码中的xmlement。在您的例子中是一个xmlement数组。

        3
  •  0
  •   user1775660    12 年前

    http://devdump.wordpress.com/2012/10/26/working-with-legacy-web-services-and-wcf/ ,希望能节省其他人的时间,因为这是我能找到的关于这个主题的唯一讨论。