我遇到了WCF请求消息命名空间的问题。在每个对象中我都有一个额外的名称空间前缀我应该如何装饰合同/对象以摆脱这些前缀(希望子节点从父节点继承命名空间)。在这种情况下,我使用的是XmlSerializer。 当前输出(从SOAPUI生成,基于wsdl):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://somenamespace.com">
<soapenv:Header/>
<soapenv:Body>
<ns:InputObject>
<ns:Data>
<ns:property1>?</ns:property1>
<ns:property2>?</ns:property2>
</ns:Data>
</ns:InputObject>
</soapenv:Body>
</soapenv:Envelope>
期望的输出:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://somenamespace.com">
<soapenv:Header/>
<soapenv:Body>
<ns:InputObject>
<Data>
<property1>?</property1>
<property2>?</property2>
</Data>
</ns:InputObject>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:0)
目前尚不清楚您要实现的目标,但请注意,您展示的两个XML并不相同(不要犹豫前缀您的第一个xml看起来完全有效)。
在第二个(肯定没有完成您的模式)中,<Data>
和<property>
元素与<InputObject>
不在同一名称空间中,名称空间继承仅适用于默认名称空间,如果您使用命名空间前缀在每个对象中使用它。
如果您的目标是避免在<InputObject>
中使用前缀,那么您必须将xmlns="http://somenamespace.com"
放入此标记中,这样所有<InputObject>
子项都会继承相同的名称空间。它的父母。
例如,您在问题中显示的这个xml:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://somenamespace.com">
<soapenv:Header/>
<soapenv:Body>
<ns:InputObject>
<ns:Data>
<ns:property1>?</ns:property1>
<ns:property2>?</ns:property2>
</ns:Data>
</ns:InputObject>
</soapenv:Body>
</soapenv:Envelope>
相当于:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<InputObject xmlns="http://somenamespace.com">
<Data>
<property1>?</property1>
<property2>?</property2>
</Data>
</InputObject>
</soapenv:Body>
</soapenv:Envelope>
请注意,两者都是等效的完全有效,因此不需要从第一个中删除命名空间前缀......
此外,正如我所说,你想要的输出&#34;您在问题中显示的确定无法完成您的模式定义,因此无效:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://somenamespace.com">
<soapenv:Header/>
<soapenv:Body>
<ns:InputObject>
<Data>
<property1>?</property1>
<property2>?</property2>
</Data>
</ns:InputObject>
</soapenv:Body>
</soapenv:Envelope>
希望这有帮助,