streda, 05 september 2012 06:52 Written by 4305 times
Rate this item
(4 votes)

C# - Čítanie a zápis XML pomocou serializácie

Tento článok nám popisuje serializaciu objektu (instancie) do XML súboru a spätne načíitanie XML súboru a vytvorenie objektu - deserializacia.

Čo je vlastne serializacia (serialize)?

V podstate ide o tom, že instancia triedy je prevedená na Stream, ktorý môžeme uložiť do súboru,alebo poslať pomocou protokolu napr http na iný pc. My si ukážeme ako ten stream uložiť do XML súboru.
A potom následne ten XML prečítame - deserializacia (deserialize).

Spravme si triedu Account.cs

public class Account
    {
        [XmlAttribute("ID")]
        public string ID
        { get; set; }
        [XmlAttribute("Currency")]
        public string Currency
        { get; set; }
        [XmlAttribute("Amount")]
        public string Amount
        { get; set; }
    }

Ďalej si spravíme triedu Accounts.cs

 class Accounts
    {
        private List<Account> accountsList;
        public Accounts()
        {
            accountsList = new List<Account>();
        }
        /// <summary>
        /// Zapis instancie do XML suboru
        /// </summary>
        /// <param name="myFile">@"C:\accounts.xml"</param>
        public void SerializeToXML(string myFile)
        {
            try
            {
                XmlSerializer serializer = new XmlSerializer(typeof(List<Account>));
                TextWriter textWriter = new StreamWriter(myFile);
                serializer.Serialize(textWriter, accountsList);
                textWriter.Close();
            }
            catch
            {
            }
        }
        /// <summary>
        /// Spatne nacitanie XML 
        /// </summary>
        /// <param name="myFile">@"C:\accounts.xml"</param>
        public void DeserializeFromXML(string myFile)
        {
            try
            {
                XmlSerializer deserializer = new XmlSerializer(typeof(List<Account>));
                TextReader textReader = new StreamReader(myFile);
                accountsList = (List<Account>)deserializer.Deserialize(textReader);
                textReader.Close();
            }
            catch
            {
            }
        }
        /// Pridanie noveho uctu
        /// </summary>
        /// <param name="myAccount"></param>
        public void AddAccount(Account myAccount)
        {
            this.accountsList.Add(myAccount);
        }
        public Account this[int myIndex]
        {
            get
            {
                return (Account)accountsList[myIndex];
            }
            set
            {
                accountsList.Add(value);
            }
        }
        public Account this[string ID]
        {
            get
            {
                foreach (Account myAccount in accountsList)
                {
                    if (myAccount.ID == ID)
                    {
                        return (Account)myAccount;
                    }
                }
                return null;
            }
        }
        public int Count
        {
            get
            {
                return accountsList.Count;
            }
        }
    }

Použitie vytvorených tried - Zápis do XML

            Accounts AccountsList = new Accounts();
            Account myAccount1 = new Account();
            myAccount1.Amount = "55";
            myAccount1.Currency = "EUR";
            myAccount1.ID = "0";
            AccountsList.AddAccount(myAccount1);
            AccountsList.SerializeToXML(@"daco.xml");

Použitie vytvorených tried - Čitanie z XML

Accounts AccountsList =  new Accounts();
AccountsList.DeSerializeFromXML(@"daco.xml"); 

XML súbor

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfAccount xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Account ID="0" Currency="EUR" Amount="55" />
  <Account ID="1" Currency="EUR" Amount="79" />
  <Account ID="2" Currency="EUR" Amount="0.00" />
  <Account ID="3" Currency="USD" Amount="8.71" />
</ArrayOfAccount>

XML serialize HELPER :

public static T DeserializeFromXML<T>(string fileName)
{
	using (StreamReader reader = new StreamReader(fileName))
	{
		XmlSerializer serializer = new XmlSerializer(typeof(T));
		T obj = (T)serializer.Deserialize(reader);                   
		return obj;
	}
}
public static void SerializeToXML<T>(T obj, string fileName)
{
	using (StreamWriter writer = new StreamWriter(fileName))
	{
		XmlSerializer serializer = new XmlSerializer(typeof(T));
		serializer.Serialize(writer, obj);
	}
}

 Použitie - zápis do XML:

SerializeToXML<Accounts>(AccountsList, @"daco.xml");

 Použitie - čítanie z XML:

AccountsList = DeserializeFromXML<Accounts>(@"daco.xml");

 

 

Last modified on pondelok, 19 december 2016 21:24
Ing.Jaroslav Vadel

Som zakladateľom www.projectik.eu.

Hrám sa na programátora, ktorý ovláda:

c#,cpp,java,unity3d,php,html,NI testand,NI Vision Builder,Cognex In-Sight,NI LabView

"Naprogramovať program, ktorý funguje vie každy. Ale to, že program funguje ešte neznamena, že je napísany správne "

Website: www.projectik.eu