是否需要WCF DataContract属性?
我有一个类没有使用DataContract标记类或使用DataMember标记属性。
当我在4台服务器上部署wcf服务时,4台服务在4台服务器上工作正常,在1台服务器上失败,并且“Type'Class'消息无法序列化。请考虑使用DataContractAttribute属性标记它,并标记其所有成员您希望使用DataMemberAttribute属性进行序列化。“
那么在web.config或machine.config中还是在IIS中我可以命令在代码中使用序列化器? 或
如果没有指定属性,我可以指定使用默认序列化程序吗?
谢谢, 克里希纳
答案 0 :(得分:5)
不,不需要DataContractAttribute - WCF将推断序列化规则。我唯一能想到检查的是,所有服务器上的.NET版本都是相同的。
答案 1 :(得分:0)
如MSDN所述
[DataContractAttribute]指定类型定义或实现数据协定,并且可由序列化程序(例如DataContractSerializer)序列化。要使其类型可序列化,类型作者必须为其类型定义数据协定
您必须使用要在WCF服务中使用的DataContract
和DataMember
属性来装饰您的类。
答案 2 :(得分:0)
是的,在WCF服务和任何客户端之间发送的所有类都需要[DataContract]
属性。
该类的所有可能包含您要发送的数据的属性都需要使用[DataMember]
属性进行标记。这样就可以定义一个包含可序列化和非序列化数据的类 - 但我不推荐它。
请注意,您只能序列化数据成员,例如public
字段或属性,但无法序列化方法。因此,我的建议是使用普通类,除了包含要在服务和客户端之间传递的数据作为数据合同之外什么都不做。