using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; public static class NewtonsoftJsonUtils { // JSON化の設定 // 参考 https://qiita.com/matchyy/items/b1cd6f3a2a93749774da#tldr public static readonly JsonSerializerSettings JSON_SETTINGS = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ContractResolver = new CamelCasePropertyNamesContractResolver() }; public static readonly JsonSerializer SERIALIZER = JsonSerializer.CreateDefault(JSON_SETTINGS); public static string GetCurrentDirectory() { // 開発中は C:/Users/%USERNAME%/AppData/LocalLow/DefaultCompany/プロジェクト名 return Application.persistentDataPath; } /// /// Jsonファイルを保存 /// /// /// ファイル名 /// /// /// ディレクトリ(空の場合はApplication.persistentDataPathになる) public static void SaveJson(T json, string filename, string directory = "") { // ディレクトリの指定がない場合はカレント if (string.IsNullOrEmpty(directory)) { directory = GetCurrentDirectory(); } // 参考 // https://www.newtonsoft.com/json/help/html/SerializeWithJsonSerializerToFile.htm using (StreamWriter file = File.CreateText(Path.Combine(directory, filename))) { SERIALIZER.Serialize(file, json); } } /// /// Jsonファイルを読み込み /// /// /// /// ディレクトリ(空の場合はApplication.persistentDataPathになる) /// public static T LoadJson(string filename, string directory = "") { // ディレクトリの指定がない場合はカレント if (string.IsNullOrEmpty(directory)) { directory = GetCurrentDirectory(); } using (StreamReader file = File.OpenText(Path.Combine(directory, filename))) { // なぜかジェネリックのメソッドが用意されてない return (T)SERIALIZER.Deserialize(file, typeof(T)); } } }