2011-05-26 32 views
4

我需要創建一個類Serializable。 在這個類中,我有一個MyGuid只讀屬性,我想要可序列化但不能反序列化(屬性在後臺字段中初始化)。 使用基本序列化.NET功能,你知道,有一個reandonly屬性使反序列化失敗,因爲它不能反序列化只讀屬性。 所以我決定創建一個具有支持字段公衆獲取設置MyGuid財產,並制定者無可奈何:使用空屬性設置器時引發Visual Studio警告

[Serializable] 
public class Task : ITask 
{ 
    private readonly Guid m_guid = Guid.NewGuid(); 
    public MyGuid Guid 
    { 
     get { return m_guid; } 
     set { /*Empty setter!*/ } 
    } 
} 

現在,我不希望在我的腳拍...... 有一種方法我可以使MyGuid屬性的setter爲「deprecable」或「disabled」? 如果我嘗試使用setter,那麼Visual Studio會警告我會很好。

或者,相反,有更好的方法來管理這種需求?

謝謝!

編輯:找到的東西在這裏:Serializing private member data我在讀......

+0

如果您不打算對其進行反序列化,爲什麼要將其串行化?你可以使用屬性上的[NonSerialized]或者'System.Xml.Serialization.XmlIgnore]屬性嗎? – 2011-05-26 10:31:15

回答

2
public Guid Guid 
{ 
    get { return m_guid; } 
    set { if (value != null) Debugger.Log(0, "Warning", "This property has an empty setter, just for serializing purpose!"); } 
} 

此,如果你不小心自己設定的值,你會得到在調試窗口警告。另一方面,你絕對需要序列化器的setter,否則反序列化器將永遠無法從文件中讀取它後指定的值!所以setter不適合你,而是序列化器正常工作。

+0

嗯,很好的解決方案! 確切的代碼是這樣的: if(value!= null) Debugger.Log(0,「Warning」,「這個屬性有一個空setter,只是爲了序列化的目的! } – 2011-05-26 10:01:34

+0

我必須在VS2010中查找調試器消息嗎? – 2011-05-26 10:07:54

+0

按照菜單:View> Output> Show output from> Debugger'。只要開始調試應用程序(按F5),它也會自動顯示在本地窗口旁邊。 – 2011-05-26 10:11:11

0

如果您不包含該設置,它將自動識別其只讀,所以不會讓你設置它。然後,當您嘗試使用代碼時,它會標記錯誤

+1

他的觀點是你必須包含序列化才能工作的集合。他只是希望標記他是(或其他人)試圖使用代碼中設置的屬性。 – 2011-05-26 09:56:09

+0

如果我不包括我的課程不會被序列化... :-) – 2011-05-26 09:57:06

+0

啊。錯過了,很好,謝謝 – BugFinder 2011-05-26 10:49:27

相關問題