如何处理WCF数据契约中的xs:any
在WCF上抓我的头。。。我有一些XML消息,如何处理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
的子元素可以是任何东西,例如
<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.exe和xsd.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为什么不自己编辑答案,而不是抱怨?