首页 文章

WCF需要datacontract属性吗?

提问于
浏览
0

在WCF DataContract属性是必需的吗?

我有一个类没有使用DataContract标记类或使用DataMember标记属性 .

当我在4服务器上部署wcf服务时,4服务在3服务器上工作正常,在1服务器上失败,消息“类型'类'无法序列化 . 请考虑使用DataContractAttribute属性标记它,并标记要序列化的所有成员使用DataMemberAttribute属性 . “

那么在web.config或machine.config中还是在IIS中我可以命令在代码中使用序列化器?要么

如果没有指定属性,我可以指定使用默认序列化程序吗?

谢谢,克里希纳

3 回答

  • 4

    不,不需要DataContractAttribute - WCF将推断序列化规则 . 我唯一能想到检查的是.NET的版本在所有服务器上是相同的 .

    更多信息:WCF Data Contract / Serialization

  • 0

    正如MSDN所述

    [DataContractAttribute]指定类型定义或实现数据协定,并且可由序列化程序(例如DataContractSerializer)序列化 . 要使其类型可序列化,类型作者必须为其类型定义数据协定

    您必须使用 DataContractDataMember 属性来装饰您的类,以便在WCF服务中使用 .

  • 0

    是的,将在WCF服务和任何客户端之间发送的所有类上需要 [DataContract] 属性 .

    该类的所有可能包含要发送的数据的属性都需要使用 [DataMember] 属性进行标记 . 这使得可以定义包含可序列化和非序列化数据的类 - 但我不推荐它 .

    请注意,您只能序列化数据成员,例如 public 字段或属性,但您无法序列化方法 . 因此,我的建议是使用普通类,除了包含要在服务和客户端之间传递的数据作为数据 Contract 之外什么都不做 .

相关问题