在wcf通信中装饰dto类的正确方法

use*_*193 5 .net c# wcf

我有类BookDTO表示将用于在客户端和服务之间交换数据的对象,其中服务是wcf服务具有以下属性

[Serializable]
[DataContract]
[KnownType(typeof(Book))]
public class BookDTO {...}
Run Code Online (Sandbox Code Playgroud)

这种装饰物体的正确(标准)方式是通过电线发送的吗?我见过的例子

[DataContract(NameSpace="somenamespace.DTO.Book")]
Run Code Online (Sandbox Code Playgroud)

正在[KnownType(typeof(Book))]这里redudant?

我忘了提到我已经介绍了DataMember属性,所以请忽略它.

Pio*_*cki 3

实际上,当您使用 DataContract 元标记时,可序列化元标记不执行任何操作。这是MSDN文章中的引用:

使用 [Serialized],所有字段都将成为数据协定的一部分(除非它们被标记为 [NonSerialized])。对于 [DataContract],仅包含标有 [DataMember] 的成员。请注意,如果类型同时具有 [DataContract] 和 [Serializable] 属性,它将使用 [DataContract] 映射

http://msdn.microsoft.com/en-us/magazine/cc163569.aspx

马文在对您的问题的评论中向您描述了 KnownType 属性。