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



编辑:最初的问题是出于误解,并已更新。

从其他语言来看,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

所示
  //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#库进行序列化,而不需要大量的代码?

感谢那些给我指出正确方向的人。

虽然基本库中没有涉及JSON,但在这种情况下,使用JSON似乎是最好的替代方案,我计划使用JSON。. NET,可以在这里找到:http://www.nuget.org/packages/Newtonsoft.Json

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

最新更新