Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理WCF数据契约中的xs:any_Wcf_Xsd_Svcutil.exe_Xsd.exe - Fatal编程技术网

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

如何处理WCF数据契约中的xs:any,wcf,xsd,svcutil.exe,xsd.exe,Wcf,Xsd,Svcutil.exe,Xsd.exe,在WCF上抓我的头。。。我有一些XML消息,的子元素可以是任何东西,例如 <Test1Root> <CaseNo></CaseNo> <Activity></Activity> <DataFields> <AccountRef></AccountRef> <PropRef></PropRef> <User></Use

在WCF上抓我的头。。。我有一些XML消息,
的子元素可以是任何东西,例如

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

我已经在BizTalk中使用
处理了这个问题

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

但我正在努力了解如何在WCF中处理这个问题

我尝试使用svcutil.exexsd.exe来创建类,它们都提供了主要元素(CaseNo、Activity等),但似乎都无法处理xs:any数据字段

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

有可能更好地处理子元素吗?

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

因为它可以是任何东西,你真的没什么办法,对吧?它可以是任何东西。。。所以你需要使用一个可以是任何类型的类型


如果您真的需要XML模式中的
xs:any
,并且不能用一组更具体的
xs:element
(可能是从另一个继承的)来代替,我不知道如何才能获得更好的支持…

您可以这样做。我在一次服务中做过很多次。我没有做过很多WCF服务,但我相信它们的工作方式是一样的。模式中的
在代码中转换为XmlElement。在您的例子中,是一个XmlElement数组。

我在一个旧的web服务中遇到了一些问题,WSDL使用“any”元素定义响应属性


使用自定义消息格式化程序解决了此问题。写了一篇关于它的帖子,更详细地描述了解决方案,希望它能节省其他人的时间,因为这是我能找到的关于这个主题的唯一讨论。

谢谢你的回复,我有点期待它,但有一个(微弱的)希望有一个非常好的方法来处理这个问题,看起来我的“”是从上面处理的。应该是这样的:架构中的“”在代码中转换为XmlElement。错误,抱歉。。。我不明白你的意思??我提到XSD.EXE生成了一个XmlElement[],那么你在说什么呢?最好对链接的内容进行总结,使其成为一个标准答案,当链接出现时不会中断。@mnel为什么不自己编辑答案,而不是抱怨?