2012-06-29 78 views
0

是在WCF DataContract属性是必需的?WCF中需要datacontract属性?

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

当我在4台服务器上部署wcf服务时,4台服务器在3台服务器上正常工作,1台服务器上出现故障,消息“Type'Class'不能被序列化,考虑用DataContractAttribute属性标记它,您希望使用DataMemberAttribute属性序列化的成员。“

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

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

谢谢, 克里希纳

回答

0

如MSDN

说明[所述DataContractAttribute]指定类型定义或实现数据契约,并且通过串行化串行,如DataContractSerializer的。为了让自己的类型可序列化,类型作者必须定义一个数据合约的类型

你必须用DataContractDataMember属性的WCF服务使用装饰你的类。

+0

我很惊讶为什么它工作3服务器上,而不是即使我有没有添加DataContract属性为单级 – Krishna

0

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

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

请注意,您只能序列化数据成员,例如, public字段或属性,但你的不能序列化方法。因此,我的建议是使用普通类,它们除了包含要在服务和客户端之间传递的数据作为数据合同外,别无其他。

+0

1级的服务器上,我知道你所提到的,但我惊讶,为什么它的工作在3服务器上,而不是在1服务器上,即使我没有为该单个类添加DataContract属性 – Krishna

+0

不,您不需要所有类上的属性;如果您在服务合同中使用它,WCF会假设您希望它成为数据合同。 –

4

不,DataContractAttribute不是必需的 - WCF将推断序列化规则。我唯一能想到的就是.NET的版本在所有的服务器上都是一样的。

更多信息:WCF Data Contract/Serialization

+0

对于.NET检查版本+1 – Seph