用对象反序列化XML文件到Array

本文关键字:Array 文件 XML 对象 反序列化 | 更新日期: 2023-09-27 18:03:41

这是我到目前为止的代码:

using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Xml;
namespace Opgaver
{
     class OpgaveController
    {
        static ArrayList _arrAktiveOpgaver = new ArrayList();
        public ArrayList arrAktiveOpgaver
        {
            get { return _arrAktiveOpgaver; }
            set { _arrAktiveOpgaver = value; }
        }
        static ArrayList _arrAfsluttedeOpgaver = new ArrayList();
        public ArrayList arrAfsluttedeOpgaver
        {
            get { return _arrAfsluttedeOpgaver; }
            set { _arrAfsluttedeOpgaver = value; }
        }
        static int _opgavenr = 100;
        public int opgavenr
        {
            get { return _opgavenr; }
            set { _opgavenr = value; }
        }
        public void opretOpgave(string opgavenavn, string opgavebeskrivelse, int opgaveprioritet, DateTime opgaveafsluttetdato)
        {
            DateTime oprettetdato = new DateTime();
            oprettetdato = DateTime.Now;
            bool opgaveafsluttet = false;
            Opgave opgave = new Opgave(oprettetdato, _opgavenr, opgavenavn, opgavebeskrivelse, opgaveprioritet, opgaveafsluttet, opgaveafsluttetdato);
            if (opgave.opgaveAfsluttet == false)
            {
                _arrAktiveOpgaver.Add(opgave);
            }
            else
            {
                _arrAfsluttedeOpgaver.Add(opgave);
            }
            _opgavenr++;
        }
        public OpgaveController()
        {
        }

        }
        public void test()
        { 
            string outfile = @"C:'Folder'Tester.xml";
            XmlSerializer xs;
            Serialize<List<Opgave>>(arrAktiveOpgaver, outfile);
            arrAktiveOpgaver = <List<Opgave>>(outfile);//deserialize data - Generates this error: Error 2   Using the generic type 'System.Collections.Generic.List<T>' requires 1 type arguments   P:'Programmerings opgaver'Opgaver'Opgaver'OpgaveController.cs   107 33  Opgaver
        }
        private void Serialize<T1>(ArrayList arrAktiveOpgaver, string outfile)
        {
            throw new NotImplementedException();
        }
        public static T DeserializeFromXml<T>(string inputFile)
        {
            XmlSerializer s = new XmlSerializer(typeof(T));
            T deserializedObject = default(T);
            using (TextReader textReader = new StreamReader(inputFile))
            {
                deserializedObject = (T)s.Deserialize(textReader);
                textReader.Close();
            }
            return deserializedObject;
        }
        public static void SerializeToXml<T>(T objToSerialize, string outputFile)
        {
            XmlSerializer s = new XmlSerializer(objToSerialize.GetType());
            using (TextWriter textWriter = new StreamWriter(outputFile))
            {
                s.Serialize(textWriter, objToSerialize);
                textWriter.Close();
            }
        }
    }
}

我需要序列化数组列表,然后反序列化它。

这是我的opgave类:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Opgaver
{
    [Serializable()] public class Opgave : IComparable
    {
        DateTime _oprettetDato = new DateTime();
        public DateTime oprettetDato
        {
            get { return _oprettetDato; }
            set { _oprettetDato = value; }
        }
        int _opgavenr;
        public int opgavenr
        {
            get { return _opgavenr; }
            set { _opgavenr = value; }
        }
        string _opgaveNavn;
        public string opgaveNavn
        {
            get { return _opgaveNavn; }
            set { _opgaveNavn = value; }
        }
        string _opgaveBeskrivelse;
        public string opgaveBeskrivelse
        {
            get { return _opgaveBeskrivelse; }
            set { _opgaveBeskrivelse = value; }
        }
        int _opgavePrioritet;
        public int opgavePrioritet
        {
            get { return _opgavePrioritet; }
            set { _opgavePrioritet = value; }
        }
        bool _opgaveAfsluttet = false;
        public bool opgaveAfsluttet
        {
            get { return _opgaveAfsluttet; }
            set { _opgaveAfsluttet = value; }
        }
        DateTime _opgaveAfsluttetDato = new DateTime();
        public DateTime opgaveAfsluttetDato
        {
            get { return _opgaveAfsluttetDato; }
            set { _opgaveAfsluttetDato = value; }
        }
        public Opgave()
        {
        }
        public Opgave(DateTime oprettetdato, int opgavenr, string opgavenavn, string opgavebeskrivelse, int opgaveprioritet, bool opgaveafsluttet, DateTime opgaveafsluttetdato)
        {
            _oprettetDato = oprettetdato;
            _opgavenr = opgavenr;
            _opgaveNavn = opgavenavn;
            _opgaveBeskrivelse = opgavebeskrivelse;
            _opgavePrioritet = opgaveprioritet;
            _opgaveAfsluttet = opgaveafsluttet;
            _opgaveAfsluttetDato = opgaveafsluttetdato;
        }
        //Sorterings metode
        public int CompareTo(object obj)
        {
            Opgave Compare = (Opgave)obj;
            int result = this.opgavenr.CompareTo(Compare.opgavenr);
            if (result == 0)
                result = this.opgavenr.CompareTo(Compare.opgavenr);
            return result;
        }
    }
}

用对象反序列化XML文件到Array

当你想序列化或反序列化数据时,使用这个静态方法:例子:

public void test()
{ 
    string outfile = @"C:'Folder'Tester.xml";
    SerializeToXml<List<Opgaver>>(arrAktiveOpgaver, outfile);//serialize data
    arrAktiveOpgaver = DeserializeFromXml<List<Opgaver>>(outfile);//deserialize data
}
public static T DeserializeFromXml<T>(string inputFile)
{
    XmlSerializer s = new XmlSerializer(typeof(T));
    T deserializedObject = default(T);
    using (TextReader textReader = new StreamReader(inputFile))
    {
        deserializedObject = (T)s.Deserialize(textReader);
        textReader.Close();
    }
    return deserializedObject;
}
public static void SerializeToXml<T>(T objToSerialize, string outputFile)
{
    XmlSerializer s = new XmlSerializer(objToSerialize.GetType());
    using (TextWriter textWriter = new StreamWriter(outputFile))
    {
        s.Serialize(textWriter, objToSerialize);
        textWriter.Close();
    }
}

序列化Opgave的数组,而不是在循环中序列化它们。

XmlSerializer xs = new XmlSerializer(arrAktiveOpgaver.GetType());
xs.Serialize(sw, arrAktiveOpgaver);

然后反序列化为Opgave数组