0

我有像这样的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;
}

我应该如何用 -Attribute 标记 prop2 和 prop3 XmlElement

4

2 回答 2

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"),
    };
于 2013-01-28T16:32:30.463 回答
-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 的某些方法。

于 2013-01-28T17:10:04.817 回答