C# wcf请求消息中不必要的命名空间前缀
我对WCF请求消息名称空间有问题。在每个对象中,我都有一个额外的名称空间前缀。我应该如何修饰一个契约/对象来去掉这些前缀,以使子节点从父节点继承名称空间。在本例中,我使用的是XmlSerializer。 根据wsdl从SOAPUI生成的当前输出:C# wcf请求消息中不必要的命名空间前缀,c#,wcf,soap,wsdl,soapui,C#,Wcf,Soap,Wsdl,Soapui,我对WCF请求消息名称空间有问题。在每个对象中,我都有一个额外的名称空间前缀。我应该如何修饰一个契约/对象来去掉这些前缀,以使子节点从父节点继承名称空间。在本例中,我使用的是XmlSerializer。 根据wsdl从SOAPUI生成的当前输出: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://somenamespace.com"> <
<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>
现在还不清楚您想要实现什么,但是请注意,您正在展示的两个XML并不等效,请不要犹豫,您的第一个XML看起来完全有效 在第二种情况下,肯定无法实现您的模式,并且元素与不在同一名称空间中,名称空间继承仅适用于默认名称空间,如果使用名称空间前缀,则必须在每个对象中使用它 如果您的目标是避免在XML中使用前缀,那么必须将XML放在XML中=http://somenamespace.com 在这个标记中,这样所有的子项都将继承与其父项相同的名称空间 例如,您在问题中显示的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>
请注意,两者都是完全有效的,因此不需要从第一个名称空间前缀中删除名称空间前缀
此外,正如我所说的,您在问题中显示的所需输出肯定无法完成模式定义,因此A是无效的:
<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>
希望这有帮助