2014-12-03 20 views
0

我正在使用VS Express 2013以C#提供的dll驅動程序與設備進行通信。因此,我使用了由生產者定義的一些類。我想保存/讀取一些對象到一個文件,但我不能將它們直接保存到一個二進制文件,因爲:將對象寫入無序列化的文件()

  1. ,因爲他們提供的DLL
  2. 這些對象無法序列
  3. 我不能添加序列化的類

一個惱人的解決方案是保存所有信息中的對象一個接一個,即保存所有整數數組,布爾變量等

using (Stream stream = File.Open(fileName, FileMode.OpenOrCreate)) 
{ 
    var bF = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
    bF.Serialize(stream, saveObj.measurementType); 
    bF.Serialize(stream, saveObj.Results); 
    bF.Serialize(stream, saveObj.TimeStamp); 
    bF.Serialize(stream, saveObj.TXPowerSet); 
    bF.Serialize(stream, saveObj.ValidCalFlags); 
} 

是否有貝特r解決方案,這樣我可以在幾個步驟中保存/讀取saveObj

它不一定是二進制文件。

編輯:根據評論修改了問題。

+0

所以你的問題是如何序列化一個不可序列化的類?它是否是二進制的?你可以使用別的東西(比如XML或JSON)嗎? – 2014-12-03 13:42:32

+0

只要我可以在不處理所有變量的情況下保存/讀取文件,任何事情都可以。 – Dorku 2014-12-03 13:45:13

+0

請編輯您的問題以包含您的實際要求。 – 2014-12-03 13:46:53

回答

3

不需要。原因Serializable是必需的,因爲二進制串行化序列化所有類(公共和私人)的字段。您必須明確授予序列化權限,以便不能序列化可能具有敏感信息的任何類。

看看XmlSerializerJsonSerializer。這些方法僅序列化公開數據,因此不需要明確同意。

您也可以使用相同的類進行反序列化,並注意公共屬性必須是可寫的。

+0

我可以直接讀取保存的數據回到對象嗎?或者這個選項只是簡化了保存部分? – Dorku 2014-12-03 13:56:44

+0

@Dorku更新了我的答案。 – 2014-12-03 14:28:36

+0

謝謝,我選擇了現在寫入/讀取所有內容的較長路徑。 – Dorku 2014-12-03 15:12:00