using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Runtime.Serialization.Formatters; using System.Text; using TelegramBotBase.Args; using TelegramBotBase.Base; using TelegramBotBase.Interfaces; namespace TelegramBotBase.States { /// /// Is used for all complex data types. Use if other default machines are not working. /// public class JSONStateMachine : IStateMachine { public String FilePath { get; set; } public bool Overwrite { get; set; } public JSONStateMachine(String file, bool overwrite = true) { if (file is null) { throw new ArgumentNullException(nameof(file)); } this.FilePath = file; this.Overwrite = overwrite; } public StateContainer LoadFormStates() { try { var content = System.IO.File.ReadAllText(FilePath); var sc = Newtonsoft.Json.JsonConvert.DeserializeObject(content, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All, TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple }) as StateContainer; return sc; } catch { } return new StateContainer(); } public void SaveFormStates(SaveStatesEventArgs e) { if (System.IO.File.Exists(FilePath)) { if (!this.Overwrite) { throw new Exception("File exists already."); } System.IO.File.Delete(FilePath); } try { var content = Newtonsoft.Json.JsonConvert.SerializeObject(e.States, Formatting.Indented, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All, TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple }); System.IO.File.WriteAllText(FilePath, content); } catch { } } } }