DataContractSerializer 需要上课和成员。 DataContractDataMember 属性。但是,在我的情况下,这些类是通过efpocoadapater框架自动生成的,并且这些属性不存在。

我如何使用数据合同序列化器强制所有成员的序列化,而不会存在这些属性?

来自Alexdej:

这在3.5SP1中发生了变化,希望您看到: http://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx

有帮助吗?

解决方案

您不能 - 简单而简单。 Datacontractserializer需要拾取要序列化的元素所需的属性。在与XMLSerializer的合同中,基本上只是序列化所有内容(除非您明确告诉它忽略它),datacontractserialializer是“选择加入” - 您必须明确地(通过属性)将其明确告诉它。序列化。

更新: 正如几个人指出的那样,使用.NET 3.5 SP1,Microsoft稍微放松了这些规则 - 任何公共读/写属性都将由Datacontractserialializer自动序列化。同时,您的课程还需要具有无参数默认构造函数 - 听起来像是我们对XMLSerializer的确切要求回到...。

当然,这是:

  • 不允许您序列化某些私有内容 - 如果要序列化,则必须将其公开为公共读/写属性
  • 不允许您指定参数的定义选择的排序 - 它将仅按照它们在类中显示的顺序使用它们
  • 现在要求您在课堂中再次拥有一个无参数构造函数以进行挑战

我仍然认为这些事情应该是明确和清晰的,使那些不再需要的东西为懒惰/马虎编程打开了道路 - 我不喜欢它。但是,如果愿意,可以立即使用它,而无需明确地标记您的属性。

马克

其他提示

我相信这是可能的。如果您实现了iSerializable接口,则序列化器用户您的实现而不是属性。尽管我认为您仍然必须标记班级[可序列化]。

它比添加属性要多得多,但确实有效。

只需用[可序列化]属性标记类。您不希望使用[非序列化]序列化标记的任何成员。请注意,[可序列化]默认情况下会导致所有字段被序列化,其中[datacontract]默认情况下序列化no字段,除了标记为[DataMember]的字段。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top