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;
}

prop2とprop3を-Attributeでマークするにはどうすればよい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 に答える