我正在尝试读取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'转换为字符串。
任何帮助请:)
答案 0 :(得分:1)
根据您的回答,您的query
和manual
解析行的解析代码不同。
在您的手册行中,您使用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)