如何使用不可序列化的成员序列化类?

时间:2016-01-29 15:14:59

标签: c# wpf serialization

我有一个类,我设置[Serializable]并为该类定义一个FontFamily类。但是当我尝试序列化时,它给我一个错误  “附加信息:在Assembly'DisplayCore中输入'System.Windows.Media.FontFamily',Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'未标记为可序列化。”

1 个答案:

答案 0 :(得分:1)

您必须自己为这些字段实施序列化,即您需要Custom Serialization。关于这样做的方法如下:

  1. 使用[NonSerialized]属性标记不可序列化的字段。

  2. 添加一个具有可序列化类型的新临时字段,例如private string _fontFamilySerialized;

  3. 为您的班级添加三种方法,分别标有[OnSerializing][OnSerialized][OnDeserialized]属性。

  4. 在OnSerializing方法中,将字体系列的值序列化到临时字段中(例如,通过提取字体系列的名称)。

  5. 在OnSerialized方法中,清除临时字段 - 不再需要它,我们也不希望人们开始使用它。

  6. 在OnDeserialized方法中,将临时字段中的值反序列化为字体系列字段(例如,通过基于临时字段中存储的名称创建新的FontFamily对象)。