2010-07-20 237 views
0

我的C#項目中有一個類標記爲[Serializable]屬性。它有RSAKeyValue類型的屬性:序列化Serializable類中的RSAKeyValue屬性

[XmlElement(PUBLIC_KEY_TAG_NAME)] 
public RSAKeyValue Key { get; private set; } 

當我試圖序列我的類XML的一個實例,然後反序列化XML回到我的類的實例,我得到:

系統.InvalidOperationException:System.Security.Cryptography.KeySizes不能被序列化,因爲它沒有無參數的構造函數。

這發生在我撥打XmlSerializer.Serialize時。我確定這是因爲我的類中有RSAKeyValue屬性,因爲所有其他被序列化的屬性都是簡單的字符串。我能做些什麼呢?我是否應該圍繞正確序列化/反序列化的RSAKeyValue實例創建自己的包裝類?

下面是一些示例XML可能被反序列化到RSAKeyValue實例:

所有的
<RSAKeyValue> 
    <Modulus>long string here...</Modulus> 
    <Exponent>short string here</Exponent> 
</RSAKeyValue> 

回答

1

首先,XML串行忽略[Serializable]屬性。其次,如果類沒有默認的構造函數,那麼您就不能使用XML序列化程序對期間進行序列化。

你想完成什麼?也許你可以使用Data Contract Serializer完成同樣的事情?


創建一個只包含一個模量和指數類。從RSAKeyValue填入該課程。序列化您的自定義類。反序列化後,使用它來創建一個新的RSAKeyValue。

+0

我希望能夠將RSAKeyValue的Modulus和Exponent部分與其他數據一起存儲在XML文檔中。我希望能夠從文件中讀取XML並將其解析到我的類的實例中,然後訪問Key屬性並獲取包含存儲在XML中的Modulus和Exponent的某個類的實例。 – 2010-07-20 18:38:48

+1

然後你只是回答你自己的問題。創建一個只包含Modulus和Exponent的類。從RSAKeyValue填入該課程。序列化您的自定義類。反序列化後,使用它來創建一個新的RSAKeyValue。 – 2010-07-20 18:48:08

+0

Hphph。隨着你的想法......;)現在就開始工作;謝謝! – 2010-07-20 18:50:26