Č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");