2010-03-19 20 views
3

序列化的System.Drawing.Color我使用默認的.NET序列化與一個System.Drawing.Color成員的類。該代碼現在正在被人們使用,我需要爲該類添加額外的成員,但仍舊反序列化舊版本。在.NET

所以,我想這樣做的標準方式:ISerializable接口,使用的SerializationInfo方法來獲取int和string成員。

問題:我的班級也有一個System.Drawing.Color成員,但SerializationInfo中不提供「GETCOLOR」方法來讀取這些數據類型。我試着得到它作爲一個int和一個字符串,它鑄造的System.Drawing.Color,但沒有運氣。

有誰知道如何反序列化從SerializationInfo中一個System.Drawing.Color?

回答

1

使用ISerializable的不對付版本的推薦方式。的[OptionalField],則來龍去脈是公本MSDN library article說明。

回答你的問題:SerializationInfo.GetValue(「fieldName」,typeof(Color))應該給你顏色。您需要投射返回值。

+0

感謝您的答案。不幸的是[OptionalField]只能用於BinaryFormatter(我正在使用SoapFormatter)。 你的GetValue的建議編制的,但現在我得到異常:「頂部對象不能被實例化的元素‘前景色’」(前景色是我試圖反序列化的元素。) 任何想法是什麼原因導致這個錯誤,或者備用方法?謝謝! – user20493 2010-03-24 18:44:34

1

我已經使用了這樣的事情過去。

<Xml.Serialization.XmlIgnore()> Public BackColour As Drawing.Color 

     Public Property xmlBackColour() As Integer 
      Get 
       Return BackColour.ToArgb 
      End Get 
      Set(ByVal value As Integer) 
       BackColour = Drawing.Color.FromArgb(value) 
      End Set 
     End Property