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

78 lines
2.6 KiB

using CoreLibrary.Joueurs;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Xml;
namespace CoreLibrary.Persistance
{
public class PersistanceJSON : IPersistance
{
public T[] Charger<T>()
{
string fichier = $"{typeof(T).Name}.json";
string ancienDossier = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../"));
Console.WriteLine(Directory.GetCurrentDirectory());
if(!Directory.Exists("Fichiers"))
{
Directory.SetCurrentDirectory(ancienDossier);
return [];
}
else
{
Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers"));
}
if (!File.Exists(fichier))
{
Directory.SetCurrentDirectory(ancienDossier);
return [];
}
;
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable<T>));
T[] elements;
using (FileStream s = File.OpenRead(fichier))
{
elements = jsonSerializer.ReadObject(s) as T[];
}
Directory.SetCurrentDirectory(ancienDossier);
return elements;
}
public void Enregistrer<T>(T[] elements)
{
string fichier = $"{typeof(T).Name}.json";
string ancienDossier = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../"));
if (!Directory.Exists("Fichiers"))
{
Directory.CreateDirectory("Fichiers");
}
Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers"));
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable<T>));
using(FileStream s = File.Create(fichier))
{
using(XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter(
s,
Encoding.UTF8,
false,
true))
{
jsonSerializer.WriteObject(writer, elements);
}
}
Directory.SetCurrentDirectory(ancienDossier);
}
}
}