2009-09-22 53 views

回答

0

你正在使用哪個序列化程序?

  • DataContractSerializer的將 包括加載關係而不是 那些尚未加載/空。
  • 如果XmlSerializer是雙向的(即實體A指向實體B,而實體B又指向後面),則XmlSerializer傾向於扼殺關係。
  • 二進制格式化器......我從來沒有找到一個能夠正確處理與其他實體有關係的L2S實體對象。因爲我試過了,所以也許我只是做了錯誤的很長一段時間...
+0

我還沒有決定串行然而,我希望他們中的一個有選擇或默認情況下並沒有試圖在所有遍歷關係屬性。我打算先嚐試System.Xml.Serialization.XmlSerializer。 – Maslow 2009-09-23 15:28:28

+0

好的。 DataContractSerializer是使用L2S生成的實體類的最佳選擇。如果你想排除任何已經加載的關係,你需要將它們清空或者關聯關聯屬性上的datamember屬性... – KristoferA 2009-09-23 15:55:48

0

還有一點要添加到接受的答案:

的關係不屬於集合將不會被DataContractSerializer的序列化(無論它們是否已加載),因爲從.dbml文件中沒有爲它們生成DataMember屬性。

I found here解釋由當時在微軟丹尼爾·西蒙斯:

這裏的問題是,到SP1之前有真的DataContract序列沒有好的辦法來處理有周期的對象的圖形。作爲LINQ to SQL的一個結果,作出了折衷決定,允許用戶選擇單向序列化,並且僅序列化不引用的集合。如果你真的想要序列化一個引用(比如上面的場景),這種機制並不適用,但它至少可以幫助你解決一些常見的場景。

在SP1中向WCF添加了新的支持,該支持使DataContract序列化能夠處理週期,但您必須通過更改DataContract的某些屬性並可能對您的集合和引用類實現進行更改以正確處理序列化,特別是WCF的反序列化行爲。在實體框架中進行了更改,以利用這些新功能,因爲它尚未發佈其第一個版本,但Linq to SQL僅在sp1中進行了小型服務包升級,並且未對其進行修改以利用此功能能力。

我還沒有在L2S上做過這方面的實驗,但是可能會生成自己的類,它們可以與L2S一起使用,並且可以正確支持帶週期的WCF序列化。

丹尼