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

时间:2011-07-28 07:37:45

标签: c# arraylist deserialization

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

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();
            }
        }

    }
}

我需要序列化arraylist,然后反序列化..

这是我的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;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

序列化Opgave数组,而不是循环序列化。

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

然后反序列化为Opgave的数组。

答案 1 :(得分:1)

每当要序列化或反序列化数据时,请使用此静态方法: 例如:

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();
    }
}