我正在通过写一个家庭图书馆经理来学习C#。
我有一个BookController,它将书籍存储在数据结构中并对它们执行操作。
C#是否有办法将字典中的数据保存到本地文件中,或许以XML方式加载以后加载,或者我是否必须自己编写?
保存和加载C#可用数据的最佳方法是什么?只需指出一个好方向。
答案 0 :(得分:23)
实际上,C#(该语言)不知道序列化的任何,但.NET(框架)提供了很多方法...... XmlSerializer
,BinaryFormatter
,DataContractSerializer
(.NET 3.0) - 或者也有一些定制的序列化框架。
使用哪个取决于您的要求; BinaryFormatter
使用起来很简单,但会将程序集元数据信息刻录到文件中 - 使其不可移植(例如,您无法在Java中打开它)。 XmlSerializer
和DataContractSerializer
主要基于xml,使其非常便携,但除非您压缩它,否则相当大。
一些专有的序列化器在两者之间; protobuf-net是一个二进制格式化程序(非常密集的数据),但遵循数据格式的便携式标准(Google的协议缓冲区规范)。这是否有用取决于您的情况。
典型代码(此处使用XmlSerializer
):
XmlSerializer ser = new XmlSerializer(typeof(Foo));
// write
using (var stream = File.Create("foo.xml"))
{
ser.Serialize(stream, foo); // your instance
}
// read
using (var stream = File.OpenRead("foo.xml"))
{
Foo newFoo = (Foo)ser.Deserialize(stream);
}
答案 1 :(得分:6)
查看Serialization和ISerializable interface
它允许您以便携式形式保存对象的状态。
答案 2 :(得分:1)
如果您希望数据采用XML格式,则XmlSerializer。
编辑:出于某种原因,我因为XmlSerializer无法序列化字典而被推荐出来。要解决此问题,您始终可以自定义序列化过程,例如this
答案 3 :(得分:1)
您还应该考虑使用Linq to SQL(或实体框架)进行O / R映射并将数据存储到数据库中(SQL CE,SQL Express)。
答案 4 :(得分:1)
我创建了一个扩展方法,它接受一个对象并为你创建一个xml字符串,你需要做的就是从文件中保存/加载。 XmlSerialisation