我有XML:
<root>
<prop1>value1</prop1>
<prop2>value2</prop2>
<data>
<prop3>value3</prop3>
<prop4>value4</prop4>
<data>
</root>
我希望将其反序列化为如下对象:
class xyz
{
string prop1;
int prop2;
string prop3;
int prop4;
}
我应该如何用XmlElement
- 属性?
答案 0 :(得分:3)
您可以使用Linq 2 Xml(假设您修复了xml并将public
添加到字段定义中)
var xDoc = XDocument.Parse(xml); // XDocument.Load(filename);
var x = new xyz()
{
prop1 = xDoc.Root.Element("prop1").Value,
prop2 = (int)xDoc.Root.Element("prop2"),
prop3 = xDoc.Root.Element("data").Element("prop3").Value,
prop4 = (int)xDoc.Root.Element("data").Element("prop4"),
};
答案 1 :(得分:1)
我会推荐这种方法:
[XmlRoot("root")]
[Serializable]
public class RootElement
{
[XmlElement("prop1")]
public string prop1 { get; set; }
[XmlElement("prop2")]
public string prop2 { get; set; }
[XmlElement("data")]
public DataElement data { get; set; }
}
[XmlRoot("data")]
[Serializable]
public class DataElement
{
[XmlElement("prop3")]
public string prop3 { get; set; }
[XmlElement("prop4")]
public string prop4 { get; set; }
}
var yourObject = (RootElement)new XmlSerializer(typeof(RootElement)).Deserialize("your xml goes here");
您可以像这样访问您的媒体资源:
yourObject.prop1
yourObject.prop2
yourObject.data.prop3
yourObject.data.prop4
如果你想将xml反序列化为扁平结构,我认为默认情况下不可能。您可以编写自己的IXmlSerializable实现,或者更好地覆盖XmlSerializer的一些方法。