我正在尝试解析
XML文档,如下所示:
var locs = from node in doc.Descendants("locations") select new { ID = (double)Convert.Todouble(node.Attribute("id")),File = (string)node.Element("file"),Location = (string)node.Element("location"),Postcode = (string)node.Element("postCode"),Lat = (double)Convert.Todouble(node.Element("lat")),Lng = (double)Convert.Todouble(node.Element("lng")) };
我收到错误:
Unable to cast object of type ‘System.Xml.Linq.XElement’ to type
‘System.IConvertible’.
当我检查节点的值时,我正确地从子位置获取所有元素,但它不想为我分解它.我检查过类似的错误,但无法弄清楚我做错了什么.有什么建议?
解决方法
您不需要将元素或属性转换为double.简单地将它们加倍:
var locs = from node in doc.Descendants("locations") select new { ID = (double)node.Attribute("id"),Lat = (double)node.Element("lat"),Lng = (double)node.Element("lng") };
Linq to Xml支持显式cast operators.
是的,XElement没有实现IConvertable接口,因此你无法将它传递给Convert.Todouble(对象值)方法.您的代码将使用将节点值传递给Convert.Todouble(字符串值)方法.像这样:
Lat = Convert.Todouble(node.Element("lat").Value)
但同样,更好的是简单地将节点转换为double类型.还是加倍? (可空)如果您的xml中可能缺少属性或元素.在这种情况下访问Value属性将引发NullReferenceException.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。