using System.Text.Json; using SzLib.DataObjects; namespace SzLib; public class SzParser(ISzFileManager szFileManager, ISzLogger szLogger) { private readonly JsonSerializerOptions _jsonOptions = new() { WriteIndented = true }; public string SerializeDatasetToJson(SzDataset dataset) { try { var jsonString = JsonSerializer.Serialize(dataset, _jsonOptions); return jsonString; } catch (JsonException e) { throw new Exception("Parse Error: " + e.Message); } } public SzDataset? DeserializeDataset(string jsonString) { try { var result = JsonSerializer.Deserialize(jsonString, _jsonOptions); return result; } catch (Exception e) { szLogger.LogError("Could not deserialize JSON to type SzDataset: " + e.Message); return null; } } public bool SaveDataset(SzDataset dataset) { var datasetPath = Path.Combine(szFileManager.DatasetsPath, dataset.Id, "dataset.json"); try { return szFileManager.SaveFile(datasetPath, SerializeDatasetToJson(dataset)); } catch (Exception e) { szLogger.LogError("Error saving dataset: " + e.Message); return false; } } public SzDataset? LoadDataset(string datasetId) { var datasetPath = Path.Combine(szFileManager.DataPath, "datasets", datasetId, "dataset.json"); var json = szFileManager.LoadFile(datasetPath); return json is null ? null : DeserializeDataset(json); } }