簡體   English   中英

將對象保存到文件-常見的替代序列化方法是什么?

[英]Save object to file - What are common alternate serialization methods?

編輯:最初的問題是出於誤解,並已更新。

從其他語言來看,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方法,但由於它無法序列化ArrayList(如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.NET,可以在以下位置找到它: http : //www.nuget.org/packages/Newtonsoft.Json

另一個不錯的選擇是Google Gson: https//code.google.com/p/google-gson/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM