将对象保存到文件 - 常见的备用序列化方法有哪些?

时间:2014-08-25 12:08:03

标签: c# serialization

编辑:原始问题是由误解造成的,并且已经更新。

来自其他语言似乎很奇怪,C#似乎没有简单的方法将对象和组件之类的内容直接转储到文件中。

让我们以java为例,我可以将任何对象转储到文件并加载,没有明显的限制:

  //Save object to file:
  FileOutputStream saveFile = new FileOutputStream(---filePath---);
  ObjectOutputStream save = new ObjectOutputStream(saveFile);
  save.writeObject(---YorObjectHere---);

  //Load object from file
  FileInputStream saveFile = new FileInputStream(---filePath---);
  ObjectInputStream save = new ObjectInputStream(saveFile);
  ---ObjectType--- loadedObject = (---ObjectType---) save.readObject();

在C#中可以轻松实现这类事吗?

我尝试过标准的序列化方法:

  //Save object to file:
  IFormatter formatterSave = new BinaryFormatter();
  Stream streamSave = new FileStream(---filePath---, FileMode.Create, FileAccess.Write, FileShare.None);
  formatterSave.Serialize(streamSave, ---ObjectToSave---);

  //Load object from file
  IFormatter formatterLoad = new BinaryFormatter();
  Stream streamLoad = new FileStream(---filePath---, FileMode.Open, FileAccess.Read, FileShare.Read);
  ---ObjectType--- ---LoadedObjectName--- = (---ObjectType---)formatterLoad.Deserialize(streamLoad);

虽然这种方法很简单,但它并不总是适用于现有代码或锁定代码,因为无法始终添加[serializable]代码。

那么序列化的最佳替代方法是什么?


感谢评论,我尝试了XML方法,但它无法正常工作,因为它无法序列化MSDN

上显示的ArrayList
  //Save object to file:
  var serializerSave = new XmlSerializer(typeof(objectType));
  writer = new StreamWriter(filePath, append);
  serializerSave.Serialize(writer, objectToWrite);

  //Load object from file
  var serializerLoad = new XmlSerializer(typeof(objectType));
  reader = new StreamReader(filePath);
  return (T)serializerLoad.Deserialize(reader);

看起来JSON是唯一可以轻松实现的方法,还是有另一种方法可以在不需要大量代码的情况下使用普通的C#库进行序列化?

1 个答案:

答案 0 :(得分:1)

感谢那些评论并指出我正确方向的人。

虽然它没有在基本库中涵盖,但在这种情况下使用JSON看起来是最好的替代,我打算使用Json.NET,它可以在这里找到:http://www.nuget.org/packages/Newtonsoft.Json

另一个不错的选择是Google Gson:https://code.google.com/p/google-gson/