将变量数据保存到磁盘

4

能否将C#中的变量保存到磁盘以便在项目的另一个实例中后续使用?

例如,我有一个包含3个字段的结构体,如以下示例:

struct MyStruct
{
    byte[] ByteData;
    int MyInt;
    double MyDouble;
};

我有一个这个结构体的实例,假设叫做MyStruct S并且我将值分配给了所有字段。在这一步之后,我想要将这个变量以某种方式保存到磁盘上,以便我稍后可以在程序中使用这些存储的值。
我知道,我可以将这些值复制到一个.txt文件中,但是我想要将变量保存在磁盘上,以便下次运行项目时可以直接将其加载到内存中。
有没有可能以某种方式将它保存在磁盘上,以便我可以像原来一样在程序中加载它?

6
看看序列化。 - CodeCaster
1
我会将其序列化为Xml格式。需要时再进行反序列化。 - BlueVoodoo
实际上,你确实希望将它保存在文本格式中。因为这样更容易调试。而且性能并不是真正关键... - Daren Thomas
3个回答

6
public void SerializeObject<T>(string filename, T obj)
   {
      Stream stream = File.Open(filename, FileMode.Create);
      BinaryFormatter binaryFormatter = new BinaryFormatter();
      binaryFormatter.Serialize(stream, obj);
      stream.Close();
   }

   public T DeSerializeObject<T> (string filename)
   {
      T objectToBeDeSerialized;
      Stream stream = File.Open(filename, FileMode.Open);
      BinaryFormatter binaryFormatter = new BinaryFormatter();
      objectToBeDeSerialized= (T)binaryFormatter.Deserialize(stream);
      stream.Close();
      return objectToBeDeSerialized;
   }

[Serializable]
struct MyStruct
{
    byte[] ByteData;
    int MyInt;
    double MyDouble;
}

不要忘记将您的对象标记为可序列化。


@Archer 实际上,可以使用代码对结构体进行序列化,为什么您认为这是不可能的呢? - daryal
那我创建一个继承Serializable的类,然后再创建这两个函数来将文件保存到磁盘并从磁盘加载它? - Simon
@Simon 只需在您想要序列化的类上添加 [Serializable] 属性即可。 - daryal

2
您可以使用序列化,参考此MSDN链接:序列化
默认的序列化选项是二进制XML


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接