我正在尝试创建一个将应用程序的当前状态保存到文件的函数,以及另一个加载已保存文件的函数。目前,所有信息都包含在单个对象中,而该对象又指向其他对象。我最近听说C#有一些内置的类可以帮助你序列化和反序列化你的对象,所以我做了一些研究并了解了DataContracts,主要来自这个页面:http://msdn.microsoft.com/en-us/library/ms731073.aspx
除了实现内置类的类之外,其中大多数都有效。例如,我有一个继承System.Windows.DependencyObject的对象,当我尝试序列化它时,它抱怨我的类继承了一个没有DataContract属性的类。
对我来说这是有道理的。反序列化对象时,不会调用其构造函数。如果它继承了一些不可序列化的东西,那么可能会使它处于无效状态。
我想知道这是否可能:我可以以某种方式告诉反序列化器在反序列化对象之前调用基类的默认构造函数吗?然后我必须告诉序列化器不要惊慌失措。
答案 0 :(得分:1)
您是否可以创建包含要存储的所有属性的数据传输对象,然后使用框架对象中的数据填充该对象?将其标记为序列化,启动您选择的序列化类 - 现在您拥有所需的所有信息。您只需在反序列化后重新填充相应的类。
答案 1 :(得分:0)
您可能需要考虑使用二进制序列化程序或xml序列化程序而不是数据协定序列化程序。如果您将其保存到文件中并且不需要该文件,则人类可读的二进制序列化几乎总是有效。
请参阅Binary Serialization,特别是Basic Serialization主题。 另请查看XmlSerializer Class,它有时适用于DataContractSerializer没有的地方。