DataContractSerializer:如何序列化沒有DataContract / DataMember屬性的類/成員

datacontractserializer efpocoadapter entity-framework serialization

DataContractSerializer要求使用DataContractDataMember屬性標記類和成員。但是,在我的情況下,使用EFPocoAdapater框架自動生成類,並且這些屬性不存在。

如何在沒有這些屬性的情況下使用DataContractSerializer強制序列化所有成員?

來自Alexdej:

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

一般承認的答案

你不能 - 簡單明了。 DataContractSerializer需要該屬性來獲取要序列化的元素。在與XmlSerializer的合約中,它基本上只序列化所有內容(除非你明確告訴它忽略它),DataContractSerializer是“選擇加入” - 你必須明確告訴它(通過屬性)哪些字段和/或屬性序列化。

更新:正如幾位人士指出的那樣,在.NET 3.5 SP1中,微軟放鬆了這些規則 - 任何公共讀/寫屬性都將由DataContractSerializer自動序列化。同時,你的類還需要一個無參數的默認構造函數 - 聽起來像我們對XmlSerializer的確切要求。

當然,這個:

  • 不允許您序列化私有內容 - 如果要序列化它,則必須將其公開為公共讀/寫屬性
  • 不允許您指定參數的已定義選定順序 - 它將按照它們在類中出現的順序使用它們
  • 現在要求您再次在類中使用無參數構造函數進行反序列化

我仍然認為這些事情應該是明確和明確的,不再需要那些開闢了懶惰/草率編程的道路 - 我不喜歡它。但是如果你願意,你現在可以使用它而不用[DataMember]明確標記你的屬性.....


熱門答案

只需使用[Serializable]屬性標記該類。任何不希望序列化標記的成員都使用[NonSerialized]。請注意,[Serializable]會導致默認情況下序列化所有字段,其中[DataContract]默認序列化沒有字段,但標有[DataMember]的字段除外。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因