将对象保存到文件-常见的序列化方法有哪些
本文关键字:方法 序列化 常见 对象 存到文件 | 更新日期: 2023-09-27 18:19:16
编辑:最初的问题是出于误解,并已更新。
从其他语言来看,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/