如何使用list将xml序列化为类

时间:2012-03-25 13:09:29

标签: c# xml

我有这个xml

<KitContent>
  <MsiData>
    <FileName>file1</FileName>
    <BaseProductVersion>1.1.0.0</BaseProductVersion>
  </MsiData>
  <MsiData>
    <FileName>file2</FileName>
    <BaseProductVersion>1.1.0.0</BaseProductVersion>
  </MsiData>
</KitContent>

我想将它序列化为一个类 课程应该如何?

public class KitContent
{
    public List<MsiData> ???? { get; set; }

    public KitContent()
    {
        ??? = new List<MsiData>();
    }
}


public class MsiData
{
    public string FileName { get; set; }
    public string BaseProductVersion { get; set; } 
}

}

'???'我上面的课是我的问题

1 个答案:

答案 0 :(得分:1)

我不确定你想要什么,但是???可以是任何标识符。如果你想将这个xml解析为C#类,恕我直言,最好的方法是使用Xml.Serialization命名空间。

以下是示例:

class Program
    {
        static void Main(string[] args)
        {
            string xml = "<KitContent>" +
                          "<MsiData>" +
                            "<FileName>file1</FileName>" +
                            "<BaseProductVersion>1.1.0.0</BaseProductVersion>" +
                          "</MsiData>" +
                          "<MsiData>" +
                            "<FileName>file2</FileName>" +
                            "<BaseProductVersion>1.1.0.0</BaseProductVersion>" +
                          "</MsiData>" +
                        "</KitContent>";

            XmlSerializer serializer = new XmlSerializer(typeof(KitContent));
            KitContent kitContent = (KitContent)serializer.Deserialize(XmlReader.Create(new StringReader(xml)));

            Console.WriteLine(kitContent.anyIdentifier[0].FileName);
            Console.WriteLine(kitContent.anyIdentifier[0].OtherName);
            Console.WriteLine(kitContent.anyIdentifier[1].FileName);
            Console.WriteLine(kitContent.anyIdentifier[1].OtherName);
        }
    }

    [XmlRoot("KitContent")]
    public class KitContent
    {
        [XmlElement("MsiData")]
        public List<MsiData> anyIdentifier { get; set; }
    }

    public class MsiData
    {
        public string FileName { get; set; }

        [XmlElement("BaseProductVersion")]
        public string OtherName { get; set; }
    }

如果您的属性名称与xml中的Element相同,则无需在该属性上添加属性。