【问题标题】:Do I need to validate an XML string before deserializing?我需要在反序列化之前验证 XML 字符串吗?
【发布时间】:2014-04-25 15:09:35
【问题描述】:

我是否需要针对我的模式文档验证我正在反序列化的 XML 字符串,还是我依赖​​反序列化过程来执行此操作? (即在反序列化过程中检测错误)

【问题讨论】:

  • 不,只是捕捉错误。
  • @PatrickHofman 喜欢使用 CanDeserialize() 方法吗?
  • 反序列化两次有什么意义?
  • @PatrickHofman often considered poor practice to design 您的代码依赖异常作为常规操作的一部分。如果可用,您应该在执行可能导致异常的操作之前进行检查。所以CanDeserialize() 将是一个很好的方法。

标签: c# .net xml deserialization


【解决方案1】:

这取决于您从哪里获取 XML - 如果它来自不受信任的来源(即您没有编写它;它只是一个带有 XML 扩展名的流或文件)然后使用 XmlValidatingReader 类实例。

仅仅因为某些东西带有“.xml”文件扩展名,并不意味着它的 XML。还取决于调用的频率 - 例如,我不会费心验证 SOAP 调用的返回,因为在我的 WCF/SOAP 库中有更高级别的一致性检查。

【讨论】:

    【解决方案2】:

    架构验证应在写入时进行。您需要在反序列化过程中捕获任何错误——但这些错误是由什么引起的并不重要。例如您可以根据架构进行验证,但仍然会收到反序列化错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多