DataContractSerializer:如何序列化没有DataContract/DataMember属性的类/成员

ale*_*emb 9 serialization entity-framework datacontractserializer efpocoadapter

DataContractSerializer要求使用DataContractDataMember属性标记类和成员.但是,在我的情况下,使用EFPocoAdapater框架自动生成类,并且这些属性不存在.

如何在没有这些属性的情况下使用DataContractSerializer强制序列化所有成员?

来自Alexdej:

这改变了3.5SP1,希望你看到:http://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx

mar*_*c_s 6

你不能 - 简单明了.DataContractSerializer需要该属性来获取要序列化的元素.在与XmlSerializer的合约中,它基本上只序列化所有内容(除非你明确告诉它忽略它),DataContractSerializer是"选择加入" - 你必须明确告诉它(通过属性)哪些字段和/或属性序列化.

更新:正如几位人士指出的那样,在.NET 3.5 SP1中,微软放松了这些规则 - 任何公共读/写属性都将由DataContractSerializer自动序列化.同时,你的类还需要一个无参数的默认构造函数 - 听起来像我们对XmlSerializer的确切要求.

当然,这个:

  • 不允许您序列化私有内容 - 如果要序列化它,则必须将其公开为公共读/写属性
  • 不允许您指定参数的已定义选定顺序 - 它将按照它们在类中出现的顺序使用它们
  • 现在要求您再次在类中使用无参数构造函数进行反序列化

我仍然认为这些事情应该是明确和明确的,不再需要那些开辟了懒惰/草率编程的道路 - 我不喜欢它.但是如果你愿意,你现在可以使用它而不用[DataMember]明确标记你的属性.....