我收到编译错误:无法将类型为'System.Xml.Linq.XElement的表达式转换为类型AutomationStatusType 我做错了什么?
的xml:
<Status>
<Version>33</Version>
<Status>Running</Status>
</Status>
查询:
var query = (from status in doc.Descendants("Status")
select new AutomationStatus
{
Version = (string)status.Element("Version"),
Status = (AutomationStatusType)status.Element("Status"),
});
类:
public class AutomationStatus
{
[XmlAttribute]
public string Version { get; set; }
[XmlElement]
public AutomationStatusType Status { get; set; }
}
[DataContract]
public enum AutomationStatusType
{
[EnumMember]
Idle,
[EnumMember]
Running
}
修改 在阅读你的评论后,我的确添加了以下内容:
Status = Enum.Parse(typeof(AutomationStatusType), (string)status.Element("Status")),
现在我收到了编译错误: 无法将类型'System.Xml.Linq.XElement'转换为'Verint.AP2.Manager.AutomationStatusType'
但是,如果我创建一个匿名类,我可以摆脱错误:
var query = (from status in doc.Descendants("AutomationStatus")
select new /*AutomationStatus*/
{
Version = (string)status.Element("Version"),
Status = Enum.Parse(typeof(AutomationStatusType), (string)status.Element("Status")),
TimeStamp = (DateTime) status.Element("TimeStamp")
});
可能是什么问题,如何创建课程(非匿名?) 谢谢!
答案 0 :(得分:3)
在解析状态而不是现在的行时使用以下代码段。
Status = Enum.Parse(typeof(AutomationStatusType), status.Element("Status")
答案 1 :(得分:2)
type conversion operator与您的枚举之间没有XElement。您需要将convert the XElement to a string和parse字符串添加到枚举:
{
Version = (string)status.Element("Version"),
Status = (AutomationStatusType)Enum.Parse(
typeof(AutomationStatusType), (string)status.Element("Status")),
}
答案 2 :(得分:0)
虽然您的代码没有显示它,但我猜你正在加载XmlDoc或其他东西。
改为使用XmlSerializer
。
类似于:
XmlSerializer serializer = new XmlSerializer(typeof(AutomationStatus));
FileStream fs = new FileStream(filename, FileMode.Open);
AutomationStatus x;
x = (AutomationStatus) serializer.Deserialize(fs);