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

本文关键字:空间 DataContract 属性 | 更新日期: 2023-09-27 18:08:56

给定一个业务对象'Order',我如何实现一个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。

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

假设您正在使用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"被自动包含。这是因为它是一个标准名称空间,包含标准属性的定义,包括nil(表示空值)和type(保存多态类型的类型信息)。由于这些属性几乎总是必需的,因此通常将名称空间添加到根元素中,实际上DataContractSerializer就是这样做的。