代码之家  ›  专栏  ›  技术社区  ›  Presidenten

如何保存C#应用程序的状态以便以后加载

  •  3
  • Presidenten  · 技术社区  · 16 年前

    我有一个程序,用户在其中向场景添加多个对象。这些对象都表示为类。 现在,我希望用户能够保存场景,以便再次加载。

    /P

    编辑:谢谢你们的快速回复。 实际上,我现在正在SQL compact 3.5数据库中存储对象的默认值。所以,如果有人知道如何序列化到SQL,这将是一个很好的信息。

    编辑2:再次感谢!我将序列化为xml,然后将其作为字符串存储到SQL数据库中。

    5 回复  |  直到 16 年前
        1
  •  5
  •   Community CDub    7 年前

    假设对象的所有值都作为公共属性可用,则可以使用XMLSerializer将对象转换为XML字符串,然后使用XMLDeserializer重新创建对象。

    有一种扩展方法可以实现这一点 here .

    如果有私有变量,仍然可以编写自己的自定义序列化/反序列化方法。

    编辑以响应原始问题编辑:

    您可以使用这些序列化技术中的任何一种将字符串存储到数据库中。另一种选择是使用ORM(对象关系映射器)来弥合对象和数据库之间的差距。

        2
  •  2
  •   Quibblesome    16 年前

    通常人们会使用数据库来做这类事情。这可能是推荐的做法。

    然而,如果您想要一个快速而肮脏的方法,您可以用相对较少的代码将其序列化为Xml或二进制。查看System.Runtime.Serialization内容。Xml或二进制的折衷是版本控制耗费大量时间。

    考虑包含1个应用程序中的对象的XML文件集合。如果您从1.0开始就向这些对象添加了字段,那么它们将无法与任何新的1.1对象兼容。要解决此问题,您必须从类型1.0编写手动更新序列->1.1. 更糟糕的是,如果您使用自动发现代码(自动序列化),例如xml或二进制序列化程序,您甚至可能需要将对象命名为不同的名称Product1/Product1.1/等等,或者编写自己的序列化代码。

    如果你的应用程序开始接近任何严重程度,我会说你可能会想使用数据库。SqlLite对于单用户应用程序非常好而且简单,任何更大的应用程序都可以使用,而且您需要一个合适的RDBMS。

        3
  •  1
  •   Stewart Johnson    16 年前

    您需要了解.NET序列化,这是一个大主题。 Here's an introductory tutorial.

        4
  •  1
  •   mmiika    16 年前

    你也可以看看 db4o ,这是一个简单的对象数据库。

        5
  •  0
  •   obermeister    12 年前

    我认为数据库也会有这个问题——除了我想它将由您使用的任何方法来处理,以将现有数据库迁移到最新版本(即,向RDBMS表添加新列或向ODBMS对象添加属性)。