如何在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。
假设您正在使用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
就是这样做的。