0

在 WCF DataContract 属性中是必需的吗?

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

当我在 4 台服务器上部署 wcf 服务时,out 4 服务在 3 台服务器上运行良好,但在 1 台服务器上失败,并显示消息“无法序列化类型‘类’。考虑使用 DataContractAttribute 属性对其进行标记,并标记您想要序列化的所有成员具有 DataMemberAttribute 属性。”

那么在 web.config 或 machine.config 或 IIS 中是否有任何设置,我可以要求在代码中使用序列化程序?或者

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

谢谢,克里希纳

4

3 回答 3

6

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

更多信息:WCF 数据协定/序列化

于 2012-06-29T15:36:29.533 回答
1

如 MSDN 所述

[DataContractAttribute] 指定该类型定义或实现数据协定,并且可由序列化程序(如 DataContractSerializer)序列化。为了使他们的类型可序列化,类型作者必须为他们的类型定义一个数据协定

DataContract您必须使用要在 WCF 服务中使用的和DataMember属性来装饰您的类。

于 2012-06-29T10:31:13.620 回答
1

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

该类的所有可能包含您要发送的数据的属性都需要使用该[DataMember]属性进行标记。这使得定义一个包含可序列化和不可序列化数据的类成为可能——但我不推荐它。

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

于 2012-06-29T11:18:49.570 回答