gpt4 book ai didi

C# 如何调试反序列化异常?

转载 作者:行者123 更新时间:2023-11-30 20:44:01 24 4
gpt4 key购买 nike

我已经使用 XSD.exe 工具创建了一个代表 XSD 的 C# 类。我使用验证代码来检查 XML 与 XSD 的一致性。我得到了这个工作,但使用另一个 XML 文件会导致异常。

XML 文件由外部程序生成,我无权访问原始代码或已发布的 XSD。

在反序列化期间读取 XML 时出现异常:

enter System.InvalidOperationException was unhandled

HResult=-2146233079 Message=Het XML 文档 (235, 17) 包含错误。

该错误被描述为尝试将字符串转换为 DateTime 格式(这不是正确的描述)。

我以为 (235,17) migt 表示文档中的位置,但这与调用堆栈不一致。

我的问题:你能帮我一个好的调试策略来解决这类问题吗?我想确切地知道异常发生在 XML 中的哪一行,但不知道如何做到这一点。

最佳答案

XML 中的行号和字符号通过 IXmlLineInfo interface 报告给异常消息,这XmlTextReader实现。值得注意的是,line numberline position 从第一个开始(只有在不可用时才为零)。

因此 "(235, 17)" 是行号和行中的位置(从 1 开始),当错误被抛出时阅读器所在的位置.在大多数情况下,这将是 XML 文件中发生错误的实际位置。但是,有时 XML 序列化程序会将读者推进到下一个 node在抛出错误之前。来自实验:

  1. 如果 XML 格式不正确,则错误将出现在行和位置报告的位置。

  2. 如果 XML 格式正确但属性值无法反序列化,则具有错误值的属性将位于行和位置报告的位置。

  3. 但是,如果 XML 格式正确且 元素 值无法反序列化,则 XML 读取器已经前进到元素末尾到下一个元素的开头XML 读取器节点(通常是元素打开或关闭),因此导致问题的元素将是紧接报告位置之前的元素,可能在上一行。

  4. 如果在 (0, 0) 处报告错误,则读取器无法开始解析 XML。可能的问题包括:

关于C# 如何调试反序列化异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29880131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com