如何在DataContract属性中指定多个名称空间

时间:2015-08-20 07:56:12

标签: c# xml serialization

鉴于业务对象'订单',如何实现DataContract属性,以便Order对象序列化为:

<Order xmlns="http://schemas.datacontract.org/2004/07/appulsive.MyCompany.SomeWebService"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
...etc.
</Order>

似乎有一个默认命名空间和一个特定命名空间。我被告知需要使用相关的Web服务。

TIA。

1 个答案:

答案 0 :(得分:0)

假设您使用的是DataContractSerializer,则只需将[DataContract(Name="desired name", Namespace="desired namespace")]添加到该类中:

[DataContract(Name = "Order", Namespace = "http://schemas.datacontract.org/2004/07/appulsive.MyCompany.SomeWebService")]
public class Order
{
    /// Various data members
    [DataMember]
    public string SomeStuff { get; set; }
}

完成此操作后,您还需要使用[DataMember]标记要序列化的所有属性,因为数据协定序列化是选择加入的。然后DataContractSerializer生成的XML将如下所示:

<Order xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/appulsive.MyCompany.SomeWebService">
    <SomeStuff>some stuff</SomeStuff>
</Order>

如您所见,名称空间"http://www.w3.org/2001/XMLSchema-instance"会自动包含在内。那是因为它是一个standard namespace,它包含标准属性的定义,包括nil(表示空值)和type(保持多态类型的类型信息)。由于几乎总是需要这些属性,因此将命名空间添加到根元素是常规的,事实上DataContractSerializer也是如此。