.net 如何让web服务对元素上有名称空间和没有名称空间的对象进行反序列化

.net 如何让web服务对元素上有名称空间和没有名称空间的对象进行反序列化,.net,xml,vb.net,web-services,xml-deserialization,.net,Xml,Vb.net,Web Services,Xml Deserialization,我继承的遗留web服务有两个版本,我只有最新版本的代码,需要使其向后兼容 以下XML可正确使用此服务(这是大多数第三方客户端发送数据的方式): 英镑 ... 但是,当它从另一个在XML元素上没有空格的第三方客户端接收到下面的XML时(它们不会更改其请求),该对象将毫无例外地反序列化,但在任何属性中都没有任何值 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/

我继承的遗留web服务有两个版本,我只有最新版本的代码,需要使其向后兼容

以下XML可正确使用此服务(这是大多数第三方客户端发送数据的方式):


英镑
...
但是,当它从另一个在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文本就能解决这个问题的方法。

你能展示一下你是如何读取这个
Xml
并对它进行反序列化的吗?.net框架会处理它-标准的Web服务,所以当它到达webmethod时,它已经被反序列化了。因此,不管如何,我不做任何特殊的事情。序列化程序不知道
Xml
名称空间,因为
.net
类型没有声明它。将属性添加到类中也是正确的,这是一种实现方法,但在有名称空间时没有帮助。我知道的唯一其他方法是创建一个helper函数,该函数接受
Xml
,然后使用
regex
剥离/解析名称空间并返回
Xml
。。。或者只要求客户机包含名称空间:)(通常不起作用)。。。祝你好运您是否正在使用或是否可以使用WCF?WCF为您提供了不同级别的扩展点,因此您可以使用IDispatchMessageInspector或IDispatchMessageFormatter来准备传入请求。@MrShoubs,此链接可能对您有用。
<System.Xml.Serialization.XmlTypeAttribute([Namespace]:="http://xxxxxxxx.co.uk/")>