【发布时间】:2015-07-29 01:38:33
【问题描述】:
我正在托管一个 C# WCF SOAP,该服务的调用包含以下元素
<element name="SomeXmlElement" type="xsd:string" minOccurs="0"/>
有问题的 WSDL 由客户端提供。
此元素的内容是有效的 XML,通常符合不同的 XSD,但对于我们的目的,是任意有效的 XML
如果数据是“原始”传递的,这是客户端喜欢发送的方式,SomeXmlElement 在反序列化后为空
<SomeXmlElement><SomeArbitraryXml/></SomeXmlElement>
如果我让他们将其包装在 CDATA 中,它可以正常工作,但客户/客户抱怨他们不必为其他实现这样做,这会导致兼容性问题
<SomeXmlElement><![CDATA[<SomeArbitraryXml/>]]></SomeXmlElement>
我的理解是,只有几个选择可以正确反序列化。
- 在 CDATA 中换行(嵌套 cdata 啊)
- 将架构更改为使用复杂类型而不是字符串,其中复杂类型引用其他 XSD 架构
- xs:any 在架构中(反序列化为什么?)
客户坚持认为这只是我的代码/.Net 中的一个缺陷,这应该以原始格式反序列化/处理。
滚动我自己的反序列化器是可能的,或者只是加载到 DOM 并访问 InnerXml 属性或诸如此类的东西,但是要覆盖默认的预期行为 imo 需要做很多工作。
想法?建议?我是否正确解释了 XML 规范?是否有不需要更改架构或重写大量 WCF 默认行为的选择?
【问题讨论】:
标签: c# xml wcf serialization cdata