c# - 反序列化验证

标签 c# validation serialization

我正在使用使用 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/

相关文章:

c# - 如何获取带有破折号的服务器控件属性名称

c# - 在继承类中使用锁的最佳实践是什么

android - SQLite 中如何创建多个主键?Android 中如何创建用户名已存在验证?

java - 如何获取 XSD 文件中未定义的所有 XML 元素的列表

json - 如何避免HashMap中的空值序列化?

java - 从 GWT 应用程序中执行 RPC 时出现 SerializationPolicy 错误

c# - PDFsharp,在 PDF 中显示 JPG 时出错

c# - 将字符串 "2017-01-01T12:00:33:123456Z+02"转换为 DateTime

JavaScript 表单验证 : understanding function call

android - kotlinx.serialization - 使用自定义 DateSerializer 将 ArrayList<Date> 序列化为数据类变量