我有一个类BookDTO,它表示将在客户端和服务之间交换数据的对象,其中服务是wcf服务具有以下属性
[Serializable]
[DataContract]
[KnownType(typeof(Book))]
public class BookDTO {...}
这是一种合适的(标准的)装饰方式吗?我见过的例子
[DataContract(NameSpace="somenamespace.DTO.Book")]
这里有[KnownType(typeof(Book))]
冗余吗?
我忘了提到我是用DataMember属性介绍的,所以请忽略这一点。
实际上,当您使用DataContract元标签时,Serializable元标签什么都不做。这是引用MSDN文章:
使用[Serializable],所有字段都将成为数据协定的一部分(除非它们用[NonSerialized]标记)。对于[DataContract],只包括标有[DataMember]的成员。请注意,如果一个类型上同时具有[DataContract]和[Serializable]属性,它将使用[DataContract]映射
http://msdn.microsoft.com/en-us/magazine/cc163569.aspx
KnowType Marvin在对您的问题的评论中向您描述了一个问题。
以下类是一个简单的DTO:
[DataContract]
public class DataTransferObjectExample
{
[DataMember]
public string ExampleData { get; set; }
}
其他一切都是针对特殊情况的,只有当你发布整个代码时,我们才能进行检查。