我有一个类,我设置[Serializable]并为该类定义一个FontFamily类。但是当我尝试序列化时,它给我一个错误 “附加信息:在Assembly'DisplayCore中输入'System.Windows.Media.FontFamily',Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'未标记为可序列化。”
答案 0 :(得分:1)
您必须自己为这些字段实施序列化,即您需要Custom Serialization。关于这样做的方法如下:
使用[NonSerialized]
属性标记不可序列化的字段。
添加一个具有可序列化类型的新临时字段,例如private string _fontFamilySerialized;
为您的班级添加三种方法,分别标有[OnSerializing]
,[OnSerialized]
和[OnDeserialized]
属性。
在OnSerializing方法中,将字体系列的值序列化到临时字段中(例如,通过提取字体系列的名称)。
在OnSerialized方法中,清除临时字段 - 不再需要它,我们也不希望人们开始使用它。
在OnDeserialized方法中,将临时字段中的值反序列化为字体系列字段(例如,通过基于临时字段中存储的名称创建新的FontFamily对象)。