将对象写入没有Seri​​alizable()的文件

时间:2014-12-03 13:38:30

标签: c# file

我使用VS Express 2013在C#中使用其提供的dll驱动程序与设备进行通信。结果我使用了生产者定义的一些类。我想将一些对象保存/读取到一个文件但我不能直接将它们保存到二进制文件中,因为:

  1. 这些对象不可序列化
  2. 我无法将Serializable添加到类中,因为它们随附了dll
  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);
    }
    

    是否有更好的解决方案,以便我可以通过几个步骤保存/阅读saveObj

    它不一定是二进制文件。

    编辑:根据评论修改问题。

1 个答案:

答案 0 :(得分:3)

没有。需要Serializable的原因是因为二进制序列化序列化了一个类(公共和私有)的所有字段。您必须明确授予序列化权限,以便无法序列化任何可能包含敏感信息的类。

查看XmlSerializerJsonSerializer。这些方法仅序列化公共数据,因此不需要明确同意。

您也可以使用相同的类进行反序列化,但需要注意公共属性必须是可写的。