NameSpace XmlSerializerFormat的问题

时间:2015-02-27 18:10:48

标签: c# xml wcf namespaces

我试图使用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/");
    }

}

1 个答案:

答案 0 :(得分:0)

尝试将XmlRoot属性添加到类中,如下所示:

[System.Xml.Serialization.XmlRootAttribute("SomeObjects", Namespace = "http://www.bar.com/")]
public partial class SomeObjects
{
    ...

要在XML文档中添加带前缀的命名空间,请创建一个包含所有前缀 - 命名空间对的XmlSerializerNamespaces对象。您为每个XmlArrayAttribute设置的命名空间必须包含在XmlSerializerNamespaces对象中。当XmlSerializer生成文档时,它正确地为每个数组项的元素名称添加前缀。

https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlrootattribute.namespace%28v=vs.110%29.aspx