Nu de mult m-am jucat cu un feature de la Castle Project care permite persistarea fișierelor de configurare sub forma unor fisiere XML. Solutia data de ei este foarte usor de folosit. Daca combinam si cu Ioc oferit de Castle Project atunci metoda de persistare a datelor este aproape perfecta.
Si totusi, exista momente cand nu avem nevoie nevoie de o solutie atat de complexa. Dorim sa salvam intr-un fisiere de configurare doar cateva date pe care apoi sa le putem incarca. Am putea folosii app setings, in care putem pune in format key/value oricate date, dar nu recomand. Avem la indemana o solutie mult mai simpla si care ne ofer acces la date printr-un mecanism mult mai sigur.
Daca ne aducem aminte, exista o clasa numita XmlSerializer, de care uitam ca exista. Cu ajutorul ei putem sa serializam si sa deserializam obiecte.
Iata si o parte din codul care serializeaza si deserializa un obiect intr-un string:
Se poate scrie un API pe langa aceasta care sa incarce sau sa salveze obiectul dintr-un fisier dat.
Si totusi, exista momente cand nu avem nevoie nevoie de o solutie atat de complexa. Dorim sa salvam intr-un fisiere de configurare doar cateva date pe care apoi sa le putem incarca. Am putea folosii app setings, in care putem pune in format key/value oricate date, dar nu recomand. Avem la indemana o solutie mult mai simpla si care ne ofer acces la date printr-un mecanism mult mai sigur.
Daca ne aducem aminte, exista o clasa numita XmlSerializer, de care uitam ca exista. Cu ajutorul ei putem sa serializam si sa deserializam obiecte.
Iata si o parte din codul care serializeaza si deserializa un obiect intr-un string:
/// <summary>
/// Serializeaza obiectul data in format xml ca si un string.
/// </summary>
private string SerializeToXMLString<T>(object obj)
where T : class
{
using (MemoryStream mem = new MemoryStream())
{
new XmlSerializer(obj.GetType()).Serialize(mem,obj);
return new ASCIIEncoding().GetString(mem.ToArray());
}
}
/// <summary>
/// Deserializeaza obiectul dintr-un string in format XML intr-un obiect.
/// </summary>
private T DeSerializeFromXMLString<T>(string xmlString)
where T:class
{
byte[] bytes = Encoding.UTF8.GetBytes(xmlString);
using (MemoryStream mem = new MemoryStream(bytes))
{
return (T)new XmlSerializer(typeof (T)).Deserialize(mem);
}
}
Se poate scrie un API pe langa aceasta care sa incarce sau sa salveze obiectul dintr-un fisier dat.
Comments
Post a Comment