59 lines
1.8 KiB
C#
59 lines
1.8 KiB
C#
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Converters;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using UnityEngine;
|
|
|
|
|
|
namespace PrizeSystem
|
|
{
|
|
public static class PrizeSerializer
|
|
{
|
|
private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
|
|
{
|
|
Formatting = Formatting.Indented,
|
|
NullValueHandling = NullValueHandling.Ignore,
|
|
Converters = new List<JsonConverter>
|
|
{
|
|
new StringEnumConverter(), // Для красивой сериализации enum'ов
|
|
new PrizeConverter()
|
|
}
|
|
};
|
|
|
|
private static string FILE_PATH => Path.Combine(Application.persistentDataPath, "Prizes.json");
|
|
|
|
private static PrizeContainer DefaultPrizeContainer;
|
|
|
|
public static void Initialize(PrizeContainer defaultPrizeContainer)
|
|
=> DefaultPrizeContainer = defaultPrizeContainer;
|
|
|
|
public static void SaveToFile()
|
|
{
|
|
var container = PrizeSystemManager.PrizeContainer;
|
|
var json = SerializeContainer(container);
|
|
File.WriteAllText(FILE_PATH, json);
|
|
}
|
|
|
|
public static PrizeContainer LoadFromFile()
|
|
{
|
|
PrizeContainer container;
|
|
if (!File.Exists(FILE_PATH))
|
|
{
|
|
container = DefaultPrizeContainer;
|
|
}
|
|
else
|
|
{
|
|
var json = File.ReadAllText(FILE_PATH);
|
|
container = DeserializeContainer(json);
|
|
}
|
|
|
|
return container;
|
|
}
|
|
|
|
private static string SerializeContainer(PrizeContainer container)
|
|
=> JsonConvert.SerializeObject(container, Settings);
|
|
|
|
private static PrizeContainer DeserializeContainer(string json)
|
|
=> JsonConvert.DeserializeObject<PrizeContainer>(json, Settings);
|
|
}
|
|
} |