C# 无法强制转换类型为';System.Xml.Linq.XElement到XXX类型
我收到编译器错误:无法将“System.Xml.Linq.XElement”类型的表达式强制转换为AutomationStatusType类型 我做错了什么 xml: 课程:C# 无法强制转换类型为';System.Xml.Linq.XElement到XXX类型,c#,linq,C#,Linq,我收到编译器错误:无法将“System.Xml.Linq.XElement”类型的表达式强制转换为AutomationStatusType类型 我做错了什么 xml: 课程: public class AutomationStatus { [XmlAttribute] public string Version { get; set; } [XmlElement] public AutomationStatusType Status { get; set; } }
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")
});
有什么问题,如何创建类(非匿名?)
谢谢 虽然您的代码没有显示它,但我猜您正在加载一个XmlDoc或其他东西 改用
XmlSerializer
大致如下:
XmlSerializer serializer = new XmlSerializer(typeof(AutomationStatus));
FileStream fs = new FileStream(filename, FileMode.Open);
AutomationStatus x;
x = (AutomationStatus) serializer.Deserialize(fs);
虽然您的代码没有显示它,但我猜您正在加载一个XmlDoc或其他东西 改用
XmlSerializer
大致如下:
XmlSerializer serializer = new XmlSerializer(typeof(AutomationStatus));
FileStream fs = new FileStream(filename, FileMode.Open);
AutomationStatus x;
x = (AutomationStatus) serializer.Deserialize(fs);
当您解析状态而不是您现在拥有的行时,请使用以下代码段
Status = Enum.Parse(typeof(AutomationStatusType), status.Element("Status")
当您解析状态而不是您现在拥有的行时,请使用以下代码段
Status = Enum.Parse(typeof(AutomationStatusType), status.Element("Status")
与您的枚举之间不存在任何差异。您需要将字符串与枚举相关联:
{
Version = (string)status.Element("Version"),
Status = (AutomationStatusType)Enum.Parse(
typeof(AutomationStatusType), (string)status.Element("Status")),
}
与您的枚举之间不存在任何差异。您需要将字符串与枚举相关联:
{
Version = (string)status.Element("Version"),
Status = (AutomationStatusType)Enum.Parse(
typeof(AutomationStatusType), (string)status.Element("Status")),
}
为什么您认为最好在linq上使用XmlSerializer?我想说,它在编码方面更简单,不一定更好。取决于它的使用方式,XmlSerializer可能会更快。也许我应该说“您可以使用XmlSerializer代替”为什么您认为最好使用XmlSerializer而不是linq?我会说它在编码方面更简单,而不是更好。取决于它的使用方式,XmlSerializer可能会更快。也许我应该说“您可以使用XmlSerializer代替”,当我尝试按照您所说的方式解析它时,我得到了一个错误:无法将类型“System.Xml.Linq.XElement”转换为“Verint.AP2.Manager.AutomationStatusType”,我收到错误:无法将类型“System.Xml.Linq.XElement”转换为“Verint.AP2.Manager.AutomationStatusType”