无法将XElement转换为十进制

时间:2016-06-07 07:18:27

标签: c# linq decimal xelement

我正在尝试读取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'类型的异常,但未在用户代码中处理

其他信息:Inputstring格式错误。

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

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

任何帮助请:)

3 个答案:

答案 0 :(得分:1)

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

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

进行语法分析

所以,为什么你不解析你的查询中的相同内容。

尝试

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

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

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

使用

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