我继承了遗留Web服务的两个版本,我只有最新版本的代码,需要使其向后兼容。
以下XML可以正常使用此服务(这是大多数第三方客户端发送数据的方式):
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetServiceOrderByID xmlns="http://www.xxxxxxxx.co.uk">
<request>
<CurrencyCode xmlns="http://xxxxxxxx.co.uk/">GBP</CurrencyCode>
...
但是当它从另一个没有XML元素名称空间的第三方客户端收到以下XML时(它们不会更改它们的请求),该对象反序列化而没有异常,但是没有任何值任何属性。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetServiceOrderByID xmlns="http://www.xxxxxxxx.co.uk">
<request>
<CurrencyCode>GBP</CurrencyCode>
我可以通过将以下属性添加到我要反序列化的类来完成其中一项工作
<System.Xml.Serialization.XmlTypeAttribute([Namespace]:="http://xxxxxxxx.co.uk/")>
但是我需要服务能够接受和反序列化两个请求(请注意,还有其他Web方法与其他请求对象也存在此问题)
我知道我可以抓住输入流并以这种方式获取XML,但是有没有办法告诉框架忽略命名空间,或者在不解析Xml文本的情况下解决这个问题。