【问题标题】:Can't converting XElement to decimal无法将 XElement 转换为十进制
【发布时间】:2016-06-07 07:18:27
【问题描述】:

我正在尝试读取 XElement 并将其转换为小数。 Sumkwh 为十进制,输入为:

<detaillinie>
        <periode>2016-04-27 06:30:00</periode>
        <kWh>0,35225</kWh>
      </detaillinie>
      <detaillinie>
        <periode>2016-04-27 06:45:00</periode>
        <kWh>0,35225</kWh>
      </detaillinie>
      <detaillinie>
        <periode>2016-04-27 07:00:00</periode>
        <kWh>0,17875</kWh>
</detaillinie>

代码如下所示:

 var query =
                from timeserie in xdoc.Descendants("detaillinie").AsEnumerable()
                select new TimeSerie
                {
                    Sumdato = (DateTime)timeserie.Element("periode"), 
                    Sumkwh = (decimal)timeserie.Element("kWh")

                }

在 mscorlib.dll 中出现“System.FormatException”类型的异常,但未在用户代码中处理

附加信息:输入字符串格式错误。

如果我手动输入 Sumkwh = decimal.parse("0,2435")我没有错误。

我试过了 Sumkwh = decimal.parse(timeserie.Element("kWh")) 它给出了错误“无法从'system.xml.linq.xelement'转换为字符串。

请帮忙:)

【问题讨论】:

  • 你的代码不完整。
  • 试试Sumkwh = decimal.Parse(timeserie.Element("kWh").ToString())
  • 您的输入使用, 作为小数分隔符,而 XML 应该写入/读取不变的文化格式值。
  • 说真的,学习如何使用 Visual Studio 调试器。无意冒犯。

标签: c# linq decimal xelement


【解决方案1】:

timeserie.Element("kWh")XElement,你需要抓住它是Value

使用

decimal.Parse(timeserie.Element("kWh").Value)

【讨论】:

  • 嗯,现在可以看出是 .value 发挥了作用,而不是文化。感谢您的帮助
【解决方案2】:

根据您的回答,您的 querymanual 解析行的解析代码不同。

在您的手册行中,您正在使用 decimal.Parse();

进行解析

那么,为什么您的解析与查询中的不同。

试试

Sumkwh = decimal.parse(timeserie.Element("kWh").Value);

在您的查询中,不要忘记从您的元素中获取价值。

【讨论】:

  • 我的错误。这行得通。我只是没有 .value 。谢谢
【解决方案3】:

虽然XElement(和XAttribute)定义了明确的运算符来转换它们的值,但它们通过使用不变的文化来实现。

这适用于您的时间戳,但小数点格式不正确并使用逗号作为小数点分隔符。

如果可能的话,我建议也使用不变的文化将值序列化到 XML 文档中。如果这不可能,您必须使用适当的文化显式解析值,即

Decimal.Parse(timeserie.Element("kWh").Value, new CultureInfo("de-DE"))

【讨论】:

  • 谢谢。缺少的是文化。但是为什么我可以传递字符串“1,234”??
  • @TBoy3 不变区域性使用, 作为数字组分隔符。解析出来的号码是1234。这使得从未知来源解析小数非常危险。
猜你喜欢
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
相关资源
最近更新 更多