代码之家  ›  专栏  ›  技术社区  ›  Präriewolf

用C保存数据结构#

  •  12
  • Präriewolf  · 技术社区  · 17 年前

    我正在通过编写一个家庭库管理器来学习C#。

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

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

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

    5 回复  |  直到 17 年前
        1
  •  24
  •   dbc    9 年前

    事实上,C#(语言)不知道 任何事物 关于序列化,但是。NET(框架)提供了很多方法。.. XmlSerializer , BinaryFormatter , DataContractSerializer (.NET 3.0)-或者也有一些定制的序列化框架。

    使用哪种取决于您的要求; 二进制格式 它易于使用,但会将程序集元数据信息刻录到文件中,使其不可移植(例如,您无法在Java中打开它)。 XmlSerializer DataContractSerializer 主要是基于xml的,这使得它非常可移植,但除非压缩,否则它相当大。

    一些专有序列化器介于两者之间; protobuf-net 是一个二进制格式化器(数据非常密集),但它遵循数据格式的可移植标准(谷歌的协议缓冲区规范)。这是否有用取决于你的场景。

    典型代码(此处使用 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);
            }
    
        2
  •  6
  •   Ed Swangren    17 年前

    Serialization 以及 ISerializable interface

    它允许您以可移植的形式保存对象的状态。

        3
  •  1
  •   gius    17 年前

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

        4
  •  1
  •   Community Mohan Dere    9 年前

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

        5
  •  1
  •   Cameron MacFarland    17 年前

    如果你想让你的数据是XML格式的,有 XmlSerializer .

    编辑:出于某种原因,我建议这样做时被否决了,因为XmlSerializer无法序列化Dictionary。

    为了解决这个问题,您可以随时自定义序列化过程,如下所示 this