using System.Runtime.Serialization.Json; using System.Text; using System.Xml; namespace CoreLibrary.Persistance { public class PersistanceJSON : IPersistance { private readonly string nomDossier = "Fichiers"; private readonly string nomRacine = "Sources"; private readonly string dossier = AppDomain.CurrentDomain.BaseDirectory; public PersistanceJSON() { while (new DirectoryInfo(dossier).Name != nomRacine) dossier = Path.GetFullPath(Path.Combine(dossier, @"../")); } 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)); var directory = Directory.GetCurrentDirectory(); 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; } 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); } } } } }