using System.Runtime.Serialization.Json; using System.Text; using System.Xml; namespace CoreLibrary.Persistance { /// /// Classe PersistanceJSON, implémentant l'interface IPersistance. /// public class PersistanceJSON : IPersistance { /// /// Chaîne de caractères représentant le nom du dossier pour sauvegarder et charger. /// private readonly string nomDossier = "Fichiers"; /// /// Chaîne de caractères représentant le nom du doissier à la racine. /// private readonly string nomRacine = "Sources"; /// /// Chaîne de caractères représentant le nom du dossier courant. /// private readonly string dossier = AppDomain.CurrentDomain.BaseDirectory; /// /// Constructeur de PersistanceJSON. /// public PersistanceJSON() { while (new DirectoryInfo(dossier).Name != nomRacine) dossier = Path.GetFullPath(Path.Combine(dossier, @"../")); } /// /// Charge les données trouvés dans le fichier de sauvegarde. /// /// Renvoie un tableau de tous les éléments chargés. public T[] Charger() where T : IEstPersistant { string fichier = $"{typeof(T).Name.ToLower()}s.json"; Directory.SetCurrentDirectory(dossier); if (!Directory.Exists(nomDossier)) return []; Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier)); if (!File.Exists(fichier)) return []; DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[])); T[] elements; using (FileStream s = File.OpenRead(fichier)) { elements = jsonSerializer.ReadObject(s) as T[]; } return elements; } /// /// Enragistre dans le fichier de sauvegarde, les éléments spécifiés. /// /// Elements à enregistrer dans le fichier de sauvegarde. public void Enregistrer(T[] elements) where T : IEstPersistant { string fichier = $"{typeof(T).Name.ToLower()}s.json"; Directory.SetCurrentDirectory(dossier); if (!Directory.Exists(nomDossier)) Directory.CreateDirectory(nomDossier); Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier)); DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[])); using (FileStream s = File.Create(fichier)) { using (XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter( s, Encoding.UTF8, false, true)) { jsonSerializer.WriteObject(writer, elements); } } } } }