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







