如何序列化继承内置c#类的对象

本文关键字:对象 内置 序列化 继承 | 更新日期: 2023-09-27 18:27:53

我正在尝试创建一个函数,将应用程序的当前状态保存到一个文件中,并创建另一个函数来加载保存的文件。目前,所有信息都包含在一个对象中,而该对象又引用其他对象。我最近听说C#有一些内置类可以帮助您序列化和反序列化对象,所以我做了一些研究并了解了DataContracts,主要是从这个页面:http://msdn.microsoft.com/en-us/library/ms731073.aspx

除了实现内置类的类之外,它的大部分都能工作。例如,我有一个继承System.Windows.DependencyObject的对象,当我尝试序列化它时,它会抱怨我的类继承了一个没有DataContract属性的类。

这对我来说很有道理,为什么这会成为一个问题。在反序列化对象时,不会调用其构造函数。如果它继承了不可序列化的东西,那么可能会使它处于无效状态。

我想知道这是否可能:在反序列化我的对象之前,我能告诉反序列化程序调用基类的默认构造函数吗?然后我必须告诉序列化程序不要抓狂。

如何序列化继承内置c#类的对象

您能创建一个具有您想要存储的所有属性的数据转换器对象,然后用框架对象中的数据填充该对象吗?将其标记为序列化,启动您选择的序列化类,现在您就可以获得所需的所有信息。您只需要在反序列化之后重新填充适当的类。

您可能需要研究使用二进制序列化程序或xml序列化程序,而不是数据协定序列化程序。如果您将其保存到一个文件中,而不需要该文件,那么人类可读的二进制序列化几乎总是有效的。

请参阅二进制序列化,特别是基本序列化主题。还可以看看XmlSerializer类,它有时会在DataContractSerializer不工作的地方工作。