1

クラスにシリアライズしたい XML があります。

<Group>
 <Employees>
     <Employee>
         <Name>Hari</Name>
         <Age>30</Age>
     </Employee>
     <Employee>
         <Name>Yougov</Name>
         <Age>31</Age>
     </Employee>
     <Employee>
         <Name>Adrian</Name>
         <Age>28</Age>
     </Employee>
</Employees >

上記の XML は、C# で非常に簡単に実現できます。しかし、XMLが次のように見える私の要件に出くわしました。

<Group>
 <Employees>
    <Hari Age=30 />
    <Yougov Age=31 />
    <Adrian Age=28 />
 </Employees >
</Group>

従業員がいるList<Employee>場所KeyValuePair<string, int>("Hari", 30)

上記のシリアル化された XML を取得するためにクラスとメンバー変数を設計するにはどうすればよいですか? (ただし、従業員リストに重複する名前はありません)

どんな助けでも大歓迎です。

* KeyValuePair のシリアル化

4

2 に答える 2

3

あなたの場合はLinq2Xmlを使用します。

XDocument xDoc = XDocument.Load(......);
var emps = xDoc.Descendants("Employees").Elements()
    .Select(x => new Employee() { 
                        Name = x.Name.ToString(), 
                        Age = int.Parse(x.Attribute("Age").Value) 
                    })
    .ToList();

PS:Age=30無効です。あるべきだAge="30"

于 2012-05-09T06:07:46.220 に答える
1

データをスキーマとして使用することはお勧めできません。特に、非常に多くの名前が xml 要素名として有効ではありませんが、それは良い習慣ではありません (たとえば、スキーマの検証に関して事実上役に立たなくなります)。簡潔にしたい場合は、おそらく次のようになります。

<Employees>
    <Add Name="Hari" Age="30" />
</Employees>

また

<Employees>
    <Employee Name="Hari" Age="30" />
</Employees>

これは、次の方法で簡単に実行できます。

[XmlArray("Employees"), XmlArrayItem("Employee")]
public List<Employee> Employees {get;set;}

と:

public class Employee {
    [XmlAttribute]
    public string Name {get;set;}
    [XmlAttribute]
    public int Age {get;set;}
}

XmlSerializerIXmlSerializable 親要素から自分ですべてを行わない限り、「要素名としてのコンテンツ」シリアライザーをサポートしません(XmlSerializerそこで処理する子を識別する方法がないため、親からのものである必要があります)。

于 2012-05-09T06:03:25.583 に答える