将XML反对象化

问题描述 投票:-1回答:1

我正在研究一个程序,我需要将对象附加到xml文件并读取它,写入文件没有问题,我的问题是从xml文件中读取对象,而读取时对象不止一个,而我却出错

        public static void WriteToXmlFile<T>(string filePath, T objectToWrite, bool append = false) where T : new()
    {
        TextWriter writer = null;
        try
        {
            var serializer = new XmlSerializer(typeof(T));
            writer = new StreamWriter(filePath, append);
            serializer.Serialize(writer, objectToWrite);
        }
        finally
        {
            if (writer != null)
                writer.Close();
        }
    }


        public static T ReadFromXmlFile<T>(string filePath) where T : new()
    {
        TextReader reader = null;
        try
        {
            var serializer = new XmlSerializer(typeof(T));
            reader = new StreamReader(filePath);
            Console.WriteLine("file readed correctly");
            return (T)serializer.Deserialize(reader);
        }

        finally
        {
            if (reader != null)
                reader.Close();
        }
    }

和我主要的测试方法:Person是一个简单的类,仅用于测试,包含A,B,a,b字段

    static void Main(string[] args)
    {

        Person p1 = new Person();
        p1.A = 1;
        p1.B = 2;
        Person p2 = new Person();
        p2.A = 45;
        p2.B = 65;
        Person p3 = new Person();
        p3.A = 213;
        p3.B = 34;
        Person p4 = new Person();
        p4.A = 45;
        p4.B = 234;
        Person p5 = new Person();
        p5.A = 324;
        p5.B = 123;
        Person p6 = new Person();
        p6.A = 53;
        p6.B = 53;
        Person p7 = new Person();
        p7.A = 46545;
        p7.B = 6435;
        Person p8 = new Person();
        p8.A = 4355;
        p8.B = 6435;
        Person p9 = new Person();
        p9.A = 4455;
        p9.B = 6455;
        Person p10 = new Person();
        p10.A = 4455;
        p10.B = 6345;



        Person[] per = new Person[] {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 };

        foreach (Person pppp in per)
        {
            FileIO.WriteToXmlFile<Person>("C://Users//ulduz//Desktop//ShoppingBackend//ShoppingBackend//personList.xml", pppp, true);
        }



        foreach (Person pppp in per)
        {
            Console.WriteLine(FileIO.ReadXML<Person>("C://Users//ulduz//Desktop//ShoppingBackend//ShoppingBackend//personList.xml").A);
        }

请帮助我

c# xml xmlserializer
1个回答
0
投票

下面的代码可与多个人一起使用。您需要了解有关使用XML的多个项目的两件事

1)属于xml根的元素数组被视为“格式不正确的Xml”。 xml规范允许该数组,但是Net库默认不允许这些数组,除非使用XmlWriter使用以下选项:

© www.soinside.com 2019 - 2024. All rights reserved.