我有一个相当大的 LINQ 查询,它将 XML 节点读取到对象属性中,但是查询中的一行导致基于“输入字符串格式不正确”的 System.FormatException 异常。
DeliveryFee = x.Descendants("LineItemShipping").Select(e => (double)e.Element("TotalPrice")).FirstOrDefault(),
(double)e.Element("TotalPrice") // this text in the line is highlighted by the debugger so this element must be the cause
XML 文档中有 1000 条记录,因此我无法找到导致异常的记录,有没有办法可以将导致错误的值“抛出”到 catch() 语句?我不太确定如何调试 LINQ 查询以在运行时获取值,并且我确信这只是一个问题,即该特定记录的 XML 节点为空。 (或包含非法字符)
我知道这是一个特定的记录,因为我可以毫无问题地提取许多行,但是当我尝试提取特定的子集时,就会出现异常,所以我知道它已本地化为一个月的数据,但我无法进一步缩小范围。
最佳答案
要找到此错误,请首先启用 breaking when an exception is thrown in visual studio ,通过调试
-> 异常
。要么对所有异常启用中断,要么对System.FormatException
启用中断。
现在,当具有无效 TotalPrice
的 LineItemShipping
节点引发异常时,Visual Studio 将停止。然后,在 immediate window ,您可以使用AncestorsAndSelf()
通过键入以下内容找到有问题的节点的方法:
e.Element("SomeStatus").AncestorsAndSelf().ToArray()
Visual Studio 将向您显示生成异常的 XElement
的路径。这应该可以让您找到有问题的 XML 节点。
关于c# - 将 XML 文档转换为对象列表的 LINQ 查询导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28037664/