2009-07-28 47 views
1

我有一種情況,我需要序列化一個對象,但不想序列化它的任何引用。這是因爲我不知道對象可能引用哪個dll,因此無法確保它們是可序列化的對象。這是因爲需要序列化插件來保持其狀態。序列化一個對象,但沒有任何引用c#

我認爲這是XML序列化(淺)的情況嗎?但是,這將忽略對象中的任何私有內容 - 這不是我想要的嗎?

這是不是有可能?

+3

考慮讓插件來保存自己的狀態。 – 2009-07-28 16:13:59

+0

這是我可以做的事情,但希望得到一個解決方案,理想情況下可以將更多的工作從插件作者身上帶走。 – PentaPenguin 2009-07-28 16:26:35

+0

這是一個在數據附近保持責任的問題。該插件知道需要保存和恢復其狀態。這是應該這樣做的。 – 2009-07-28 16:30:01

回答

0

如果您在類型聲明時知道哪些引用不應被序列化,您可以使用二進制序列化並使用[NonSerialized]屬性過濾出成員。

1

Xml序列化僅適用於可公開訪問的內容。此外,除非您使用[XmlIgnore]屬性標記公共屬性/字段,否則被序列化。

如果您只是在查看某種序列化方法,請使用二進制序列化。它會序列化對象的內部狀態(所有字段,私有或其他)。如果需要,可以使用[NonSerialized]屬性忽略特定的引用。

0

認沽NonSerialized二進制和XmlIgnore屬性的情況下,在屬性XML序列化的情況下引用屬性或字段

0

你知道哪些屬性可以序列,不過,是否正確?這些插件是否實現了一個通用接口?如果是這種情況,您應該可以編寫一個只能序列化您選擇的特定屬性的通用序列化器。

這是一個基本的例子,會給你的,你需要做的事情的想法: Object Serialization using C#

如果你只是希望你的類實例中的序列化原生類型,你就應該能夠實現了ISerializable ,但是,並修飾你不想被序列化的屬性。

0

你可以嘗試這樣的事情:

Type myType = currentObject.GetType(); 

然後檢查是否對象是序列化的使用:

myType.IsSerializable; //returns a bool 

這應該告訴你該對象是否是序列化。如果您確實需要知道類中的每個對象是否可序列化,例如其他嵌套類或自定義類型,那麼您可以使用反射來讀取每個對象,使用上面的代碼並驗證它是否可序列化。然而,這可能是一種更復雜的方法,並且可能不合理,特別是如果您有處理費用問題。

0

它可能是有用的你分開你想堅持從你如何堅持它。

看起來你想控制你想要保存數據的方式,但很明顯,由於你的插件模型,不知道它是什麼。

一個方案,它可能是有意義的,你是給你的插件某種物體或接口的,他們可以寫入和當它的時間來保存/加載讀取。證明這些限制是很好的。

例如,當堅持,讓你的插件傳遞給你:

  1. 一些任意字節數組,他們負責序列化/反序列化。那麼確保他們使用可正確序列化的對象是插件責任。
  2. 一個XML文件
  3. 別人的字典...

存儲每個插件該信息(在兩者形成你想要的),並裝載了一遍,傳回相同的信息。

這簡直是圍繞着到底,插件知道它需要保存,並且需要擁有該資料片的事實的方法。

相關問題