我有一个XElement
看起来像这样:
<row flag="1" sect="" header="" body="" extrainfo="0" />
然后我有一个看起来像这样的课:
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
对象?
答案 0 :(得分:14)
您必须在类和类成员上添加正确的序列化属性
[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 :(得分:10)
你可以这样做:
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(
"<row flag='1' sect='3' header='4444' body='3434' extrainfo='0' />");
//StringReader reader = new StringReader(
//"<row flag='1' sect='3' header='4444' body='3434' extrainfo='0' />");
StringReader reader = new StringReader(xElement.ToString());
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ProductAttribute));
productAttribute = (ProductAttribute)xmlSerializer.Deserialize(reader);
我希望它可以帮到你。
答案 2 :(得分:6)
你试过了吗?
XElement element = //Your XElement
var serializer = new XmlSerializer(typeof(ProductAttribute));
(ProductAttribute)serializer.Deserialize(element.CreateReader())
答案 3 :(得分:3)
我会添加一个接受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);
如果你想创建动态,你可以使用反射获取类上的属性然后循环然后搜索XElement以获取该属性,然后以相同的方式设置该属性。但是我会保持简单,因为对象并不复杂。
答案 4 :(得分:1)
这看起来相当容易(至少没有错误检查......):
var res = new ProdicAttribute {
Flag = (string)element.Attribute("flag"),
Sect = (string)element.Attribute("sect"),
...
}
答案 5 :(得分:0)
var element = XElement.Parse("<row flag="1" sect="" header="" body="" extrainfo="0" />");
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
。