using Model; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.Text; using System.Threading.Tasks; using System.Xml; namespace DataPersistence { public class DataContractJSON : IDataManager { private string _jsonFolderPath; private DataContractJsonSerializerSettings _dataContractJsonSerializerSettings; public DataContractJSON(string jsonFolderPath = "", DataContractJsonSerializerSettings? dataContractJsonSerializerSettings = null) { _jsonFolderPath = jsonFolderPath; if (dataContractJsonSerializerSettings is null) _dataContractJsonSerializerSettings = new DataContractJsonSerializerSettings() { KnownTypes = new[] { typeof(Recipe) } }; else _dataContractJsonSerializerSettings = dataContractJsonSerializerSettings; } public void Export(T obj, string pathToExport) where T : class { throw new NotImplementedException(); } public KeyValuePair Import(string pathToImport) where T : class { throw new NotImplementedException(); } public Dictionary> Load() { Dictionary>? elements = new Dictionary>(); var jsonSerializer = new DataContractJsonSerializer(typeof(Dictionary>), _dataContractJsonSerializerSettings); using (FileStream stream = File.OpenRead(Path.Combine(_jsonFolderPath, "data.json"))) { elements = jsonSerializer.ReadObject(stream) as Dictionary>; } if (elements is null) throw new ArgumentNullException("elements"); return elements; } public void Save(Dictionary> elements) { var jsonSerializer = new DataContractJsonSerializer(typeof(Dictionary>), _dataContractJsonSerializerSettings); using (FileStream stream = File.Create(Path.Combine(_jsonFolderPath, "data.json"))) { using (var jsonWriter = JsonReaderWriterFactory.CreateJsonWriter( stream: stream, encoding: System.Text.Encoding.UTF8, ownsStream: false, indent: true)) { jsonSerializer.WriteObject(jsonWriter, elements); } } } } }