c# - 将 XML 文档转换为对象列表的 LINQ 查询导致异常

标签 c# xml linq

我有一个相当大的 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启用中断。

现在,当具有无效 TotalPriceLineItemShipping 节点引发异常时,Visual Studio 将停止。然后,在 immediate window ,您可以使用AncestorsAndSelf()通过键入以下内容找到有问题的节点的方法:

e.Element("SomeStatus").AncestorsAndSelf().ToArray()

Visual Studio 将向您显示生成异常的 XElement 的路径。这应该可以让您找到有问题的 XML 节点。

关于c# - 将 XML 文档转换为对象列表的 LINQ 查询导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28037664/

相关文章:

c# - LINQ 在 Where 字符串中聚合

c# - List<string[]> 通过 Linq 确定最大长度

c# - 使用 MEF 从 X 个文件夹导入零件

java - XML 将 : Loop through a child node and save field, 值解析为 HashMap

c# - 在 LINQ 中使用两个条件获取单个记录

c# - WPF 有条件地启用键绑定(bind)

C#、WCF 和 DateTime.MinValue() 与空日期

c# - 如何遍历 json 对象中的项目并在 C# 中检索特定值?

android - res-auto 和 com.package.name 之间命名 xml 的区别 - android

xml - 用于 GPX 文件的 Delphi 免费 XML 解析器/阅读器