在尝试反序列化SOAP响应时,我一直遇到名称空间不匹配。
响应是不合格的,嵌套的复杂类型使用如下命名空间进行限定:
<getResult>
<enc:ApplicationExceptionOccurred xmlns:enc="com.namespace1.www/complexTypes">false</enc:ApplicationExceptionOccurred>
<enc:SystemExceptionOccurred xmlns:enc="com.namespace1.www/complexTypes">false</enc:SystemExceptionOccurred>
<enc:ComplexType xmlns:enc="com.namespace1.www/complexTypes">
...
</enc:ComplexType>
</getResult>
通过在生成的类型中添加以下属性,我可以正确地命名空间:
[System.Xml.Serialization.XmlElementAttribute(Namespace="com.namespace1.www/complexTypes", Form=System.Xml.Schema.XmlSchemaForm.Qualified, Order=0)]
如果消息是Literal,这可以正常工作。但是,此服务使用SOAP编码。当我将以下内容添加到XmlSerializerFormatAttribute:
时 Use = System.ServiceModel.OperationFormatUse.Encoded
然后,XmlElementAttributes似乎被忽略,我再次遇到命名空间不匹配问题。我假设我需要使用SoapElementAttribute,但它没有办法设置命名空间。
那么......如何在Soap编码消息上以类似于XmlElementAttribute的方式设置命名空间?