using System;using System.Xml.Serialization;using System.IO;namespace Utilities { /// <summary> /// Serialisation / Deserialisation avec les generics .NET 2.0 /// Sauvegare / chargement vers fichier, string ou stream /// </summary> public class XMLSerialize<T> : MarshalByRefObject where T : new() { // Le serialiser est statique ainsi il n'est construit qu'une fois par le CLR // gain de temps enorme qui evite de faire une reflection à chaque utilisation static XmlSerializer m_serializer = new XmlSerializer(typeof(T)); static public T LoadFromFile(string fileName) { T result; try { using (FileStream input = new FileStream(fileName, FileMode.Open)) { result = (T)m_serializer.Deserialize(input); } } catch { result = new T(); } return result; } static public T LoadFromString(string data) { T result; try { using (StringReader sr = new StringReader(data)) { result = (T)m_serializer.Deserialize(sr); } } catch { result = new T(); } return result; } static public T LoadFromStream(Stream stream) { T result; try { XmlSerializer read = new XmlSerializer(typeof(T)); result = (T)m_serializer.Deserialize(stream); } catch { result = new T(); } return result; } public void SaveToStream(Stream stream) { m_serializer.Serialize(stream, this); } public string SaveToString() { StringWriter sw = new StringWriter(); m_serializer.Serialize(sw, this); return sw.ToString(); } public void SaveToFile(string fileName) { using (StreamWriter sm = new StreamWriter(fileName)) { m_serializer.Serialize(sm, this); } } } // Exemple d'utilisation public class Exemple : XMLSerialize<Exemple> { public string m_nom; public int m_age; } public class M { public static void Main() { Exemple e = new Exemple(); e.m_nom = "Newton"; e.m_age = 45; string sauve = e.SaveToString(); // Sauver vers une chaîne Exemple e2 = Exemple.LoadFromString(sauve); // Création d'une nouvelle instance } } }
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.