这取决于你正在使用什么绑定(更具体地说,是哪个序列化程序)。如果您使用的是DataContractSerializer
,那么答案很简单:什么都不做。这两份合同是等同的;
- 明确的名称
[DataContract(...)]
,如果一个 - 否则类名称(匹配)
- 在
[DataContract(...)]
明确的XML命名空间如果您正在使用NetDataContractSerializer
:该线数据是通过定义,简单:你不能。
请注意,客户端使用的c#名称空间完全取决于客户端,并且通常由用于生成类型的工具确定。坦率地说,只要客户端使用基于合同的串行器(如XmlSerializer
或DataContractSerializer
),那么客户端用作c#名称空间的内容并不重要。
为了说明这一点:这两次打印同样的事情:
using System.Runtime.Serialization;
using System;
namespace A
{
[DataContract] class Foo { }
}
namespace B
{
[DataContract] class Foo { }
}
static class Program
{
static void Main()
{
new DataContractSerializer(typeof (A.Foo)).WriteObject(
Console.OpenStandardOutput(), new A.Foo());
Console.WriteLine();
new DataContractSerializer(typeof (B.Foo)).WriteObject(
Console.OpenStandardOutput(), new B.Foo());
}
}
在这种情况下,我相信你是正确的 - 但是,它不是“显然是真实的” - 可以在WCF使用的库中共享DTO类型 – 2012-02-27 09:32:23