无法将 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)
根据您的回答,您的 query
和 manual
解析行的解析代码不同。
在您的手动行中,您正在使用 decimal.Parse();
进行解析
所以,为什么您不按照查询中的方式进行解析。
尝试
Sumkwh = decimal.parse(timeserie.Element("kWh").Value);
在您的查询中,不要忘记从您的元素中获取值。
虽然 XElement
(和 XAttribute
)定义了用于转换其值的显式运算符,但它们是通过使用不变区域性来实现的。
这适用于您的时间戳,但小数点格式不正确,使用逗号作为小数点分隔符。
如果可能的话,我建议也使用不变区域性将值序列化到 XML 文档。如果这不可能,您必须使用适当的文化明确解析该值,即
Decimal.Parse(timeserie.Element("kWh").Value, new CultureInfo("de-DE"))
我正在尝试读取 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)
根据您的回答,您的 query
和 manual
解析行的解析代码不同。
在您的手动行中,您正在使用 decimal.Parse();
进行解析所以,为什么您不按照查询中的方式进行解析。
尝试
Sumkwh = decimal.parse(timeserie.Element("kWh").Value);
在您的查询中,不要忘记从您的元素中获取值。
虽然 XElement
(和 XAttribute
)定义了用于转换其值的显式运算符,但它们是通过使用不变区域性来实现的。
这适用于您的时间戳,但小数点格式不正确,使用逗号作为小数点分隔符。
如果可能的话,我建议也使用不变区域性将值序列化到 XML 文档。如果这不可能,您必须使用适当的文化明确解析该值,即
Decimal.Parse(timeserie.Element("kWh").Value, new CultureInfo("de-DE"))