DataContractSerializer
要求使用DataContract
和DataMember
属性标记类和成员。但是,就我而言,这些类是使用EFPocoAdapater框架自动生成的,并且这些属性不存在。
如果没有这些属性,我如何强制使用DataContractSerializer对所有成员进行序列化?
来自Alexdej:
这改变了3.5SP1,希望你看到 那: http://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx
答案 0 :(得分:6)
你不能 - 简单明了。 DataContractSerializer需要该属性来获取要序列化的元素。在与XmlSerializer的合约中,它基本上只序列化所有内容(除非你明确告诉它忽略它),DataContractSerializer是“选择加入” - 你必须明确告诉它(通过属性)哪些字段和/或属性序列化。
更新:正如几位人士指出的那样,在.NET 3.5 SP1中,微软放宽了这些规则 - 任何公共读/写属性都将由DataContractSerializer自动序列化。同时,你的类还需要一个无参数的默认构造函数 - 听起来就像我们对XmlSerializer的确切要求一样....
当然,这是:
我仍然认为这些事情应该明确而清晰,不再需要那些开辟了懒惰/草率编程的道路 - 我不喜欢它。但是如果你愿意,你现在可以使用它,而无需用[DataMember] .....
明确标记你的属性马克
答案 1 :(得分:0)
我相信这是可能的。如果实现ISerializable接口,则序列化程序会使用您的实现而不是属性。虽然我认为你仍然需要标记类[Serializable]。
它比添加属性更多的工作,但它确实有效。
答案 2 :(得分:0)
只需使用[Serializable]属性标记该类。 任何不希望序列化标记的成员都使用[NonSerialized]。请注意,[Serializable]会导致默认情况下序列化所有字段,其中[DataContract]默认序列化没有字段,除了标有[DataMember]的字段。