我试图使用XMLSerializerFormat和WCF设置我的命名空间。但我似乎无法让命名空间出现在对象的根目录上。如果我使用基本的xmlserializer,但是通过线路传输时,它似乎没问题。
以下是使用基本xmlserializer
时的样子<?xml version="1.0" encoding="utf-16"?> <bar:SomeObjects xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:bar="http://www.bar.com/"> <bar:Name>FooBar</bar:Name> <Foo:SomeObject xmlns:Foo="http://www.Foo.com/">
<Foo:FirstName>Foo</Foo:FirstName>
<Foo:LastName>Bar</Foo:LastName> </Foo:SomeObject> <Foo:SomeObject xmlns:Foo="http://www.Foo.com/">
<Foo:FirstName>Bar</Foo:FirstName>
<Foo:LastName>Foo</Foo:LastName> </Foo:SomeObject> </bar:SomeObjects>
请注意,SomeObjects root的名称空间为bar。
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<ActivityId CorrelationId="e16015ee-718d-4e2a-845b-0214e4caa708" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">9bcdae91-074d-4802-b4f3-c11f310d7b13</ActivityId>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GiveMeSomeObjects xmlns="http://tempuri.org/">
<SomeObjects xmlns:bar="http://www.bar.com/">
<bar:Name>FooBar</bar:Name>
<foo:SomeObject xmlns:foo="http://www.foo.com/">
<FirstName xmlns="http://www.Foo.com/">Foo</FirstName>
<LastName xmlns="http://www.Foo.com/">Bar</LastName>
</foo:SomeObject>
<foo:SomeObject xmlns:foo="http://www.foo.com/">
<FirstName xmlns="http://www.Foo.com/">Bar</FirstName>
<LastName xmlns="http://www.Foo.com/">Foo</LastName>
</foo:SomeObject>
</SomeObjects>
</GiveMeSomeObjects>
</s:Body>
</s:Envelope>
请注意Root&#34; SomeObjects&#34;没有命名空间前缀。
在我的代码中,我创建了以下内容,将构造函数添加到wsdl创建的代理类的部分类中。
[XmlRootAttribute("SomeObjects", Namespace = "http://www.bar.com/")]
public partial class SomeObjects
{
public SomeObjects()
{
xmlsnField = new XmlSerializerNamespaces();
this.xmlsnField.Add("bar", "http://www.bar.com/");
this.xmlsnField.Add("foo", "http://www.foo.com/");
}
}
答案 0 :(得分:0)
尝试将XmlRoot
属性添加到类中,如下所示:
[System.Xml.Serialization.XmlRootAttribute("SomeObjects", Namespace = "http://www.bar.com/")]
public partial class SomeObjects
{
...
要在XML文档中添加带前缀的命名空间,请创建一个包含所有前缀 - 命名空间对的XmlSerializerNamespaces对象。您为每个XmlArrayAttribute设置的命名空间必须包含在XmlSerializerNamespaces对象中。当XmlSerializer生成文档时,它正确地为每个数组项的元素名称添加前缀。