在C#中保存数据结构

时间:2008-12-16 07:08:48

标签: c# serialization

我正在通过写一个家庭图书馆经理来学习C#。

我有一个BookController,它将书籍存储在数据结构中并对它们执行操作。

C#是否有办法将字典中的数据保存到本地文件中,或许以XML方式加载以后加载,或者我是否必须自己编写?

保存和加载C#可用数据的最佳方法是什么?只需指出一个好方向。

5 个答案:

答案 0 :(得分:23)

实际上,C#(该语言)不知道序列化的任何,但.NET(框架)提供了很多方法...... XmlSerializerBinaryFormatterDataContractSerializer(.NET 3.0) - 或者也有一些定制的序列化框架。

使用哪个取决于您的要求; BinaryFormatter使用起来很简单,但会将程序集元数据信息刻录到文件中 - 使其不可移植(例如,您无法在Java中打开它)。 XmlSerializerDataContractSerializer主要基于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)

查看SerializationISerializable interface

它允许您以便携式形式保存对象的状态。

答案 2 :(得分:1)

如果您希望数据采用XML格式,则XmlSerializer

编辑:出于某种原因,我因为XmlSerializer无法序列化字典而被推荐出来。

要解决此问题,您始终可以自定义序列化过程,例如this

答案 3 :(得分:1)

您还应该考虑使用Linq to SQL(或实体框架)进行O / R映射并将数据存储到数据库中(SQL CE,SQL Express)。

答案 4 :(得分:1)

我创建了一个扩展方法,它接受一个对象并为你创建一个xml字符串,你需要做的就是从文件中保存/加载。 XmlSerialisation