我正在使用使用 DataContractSerializer
序列化和反序列化的字体列表。在这两个步骤之间,可以想象用户已从其计算机中删除了某种字体。我想在反序列化时检查字体名称,以确保它仍然存在于系统上。如果不存在,则该元素不会包含在 DataContractSerializer.ReadObject()
返回的集合中。
具体来说,我存储一个 FontFamily
并序列化一个获取 FontFamily.Name
的属性。在此属性的 set 访问器中,我将字符串转换回 FontFamily
。
我能想到的唯一合理的验证替代方法是让属性的 set 访问器忽略无效值,并稍后过滤掉无效的反序列化对象。但是,我不喜欢这个选项 - 有更合适的方法吗?
最佳答案
为什么不利用 OnDeserializedAttribute 呢?让您的回调验证并删除对客户端环境无效的项目。
http://msdn.microsoft.com/en-us/library/ms733734.aspx
我确实担心如果您在幕后删除或修改数据,您将如何进行数据往返。
(例如:我记得对旧版本的 MS Publisher 特别沮丧,因为我在连接两台不同打印机的两台不同机器上处理文档。每当我在一台机器上修改文件时,Publisher 都会重新格式化文档以连接到该机器的打印机为目标。当我回到要进行实际打印的另一台机器时,Publisher 会再次重新格式化,但边距不太正确,因此我需要进行更多调整。 )
关于c# - 反序列化验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/525977/