如何将xml序列化为具有列表的类

本文关键字:列表 xml 序列化 | 更新日期: 2023-09-27 18:29:07

我有这个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; } 
}

}

"???"我在上面的类中放入的是我的问题

如何将xml序列化为具有列表的类

我不确定你想要什么,但是???可以是任何标识符。若要将这个xml解析为C#类,IMHO最好的方法是使用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相同,则不需要在该属性上放置属性。