将单个XElement转换为对象
我有一个XElement
看起来像这样:
然后我有一个看起来像这样的课:
public class ProductAttribute { public string Flag { get; set; } public string Sect { get; set; } public string Header { get; set; } public string Body { get; set; } public string Extrainfo { get; set; } }
如何将此XElement
转换为ProductAttribute
对象?
您必须在类和类成员上放置正确的序列化属性
[Serializable()] [XmlRoot(ElementName = "row")] public class ProductAttribute { [XmlAttribute("flag")] public string Flag { get; set; } [XmlAttribute("sect")] public string Sect { get; set; } [XmlAttribute("header")] public string Header { get; set; } [XmlAttribute("body")] public string Body { get; set; } [XmlAttribute("extrainfo")] public string Extrainfo { get; set; } }
你可以这样做:
1)首先你应该给这个类赋予属性:
[XmlRoot("row")] public class ProductAttribute { [XmlAttribute("flag")] public string Flag { get; set; } [XmlAttribute("sect")] public string Sect { get; set; } [XmlAttribute("header")] public string Header { get; set; } [XmlAttribute("body")] public string Body { get; set; } [XmlAttribute("extrainfo")] public string Extrainfo { get; set; } }
2)现在您可以反序列化您的XElement或简单的xml字符串,如下所示:
ProductAttribute productAttribute = new ProductAttribute(); XElement xElement = XElement.Parse( "
"); //StringReader reader = new StringReader( //"
"); StringReader reader = new StringReader(xElement.ToString()); XmlSerializer xmlSerializer = new XmlSerializer(typeof(ProductAttribute)); productAttribute = (ProductAttribute)xmlSerializer.Deserialize(reader);
我希望它对你有所帮助。
你有没有尝试过:
XElement element = //Your XElement var serializer = new XmlSerializer(typeof(ProductAttribute)); (ProductAttribute)serializer.Deserialize(element.CreateReader())
我会添加一个接受XElement的构造函数。
public class ProductAttribute { public string Flag { get; set; } public string Sect { get; set; } public string Header { get; set; } public string Body { get; set; } public string Extrainfo { get; set; } public ProductAttribute(XElement xElement){ Flag = (string)element.Attribute("flag"); Sect = (string)element.Attribute("sect").Value; Header = (string)element.Attribute("header ").Value; Body = (string)element.Attribute("body").Value; Extrainfo = (string)element.Attribute("extrainfo").Value; } }
那你就可以打电话了
var productAttribute = new ProductAttribute(element);
如果你想创建动态,你可以使用reflection获取类上的属性然后循环然后搜索XElement以获取该属性,然后以相同的方式设置该属性。 但是我会保持简单,因为对象并不复杂。
这似乎相当容易(至少没有错误检查…):
var res = new ProdicAttribute { Flag = (string)element.Attribute("flag"), Sect = (string)element.Attribute("sect"), ... }
var element = XElement.Parse("
"); var productAttribute = new ProductAttribute { Flag = (string)element.Attribute("flag"), Sect = (string)element.Attribute("sect"), Header = (string)element.Attribute("header"), Body = (string)element.Attribute("body"), Extrainfo = (string)element.Attribute("extrainfo") };
但我认为不应将所有ProductAttribute
类属性键入为string
。