You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mastermind/Sources/CoreLibrary/Persistance/PersistanceJSON.cs

72 lines
2.4 KiB

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<T>() 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>(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);
}
}
}
}
}