无法将 XElement 转换为十进制

Can't converting XElement to decimal

我正在尝试读取 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")

                }

类型 'System.FormatException' 的异常发生在 mscorlib.dll 但未在用户代码中处理

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

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

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

任何帮助请:)

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

使用

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

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

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

进行解析

所以,为什么您不按照查询中的方式进行解析。

尝试

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

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

虽然 XElement(和 XAttribute)定义了用于转换其值的显式运算符,但它们是通过使用不变区域性来实现的。

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

如果可能的话,我建议也使用不变区域性将值序列化到 XML 文档。如果这不可能,您必须使用适当的文化明确解析该值,即

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