2014-12-03 73 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