using System; using System.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace VketCloudGUITools.Editor { /// /// Json書き込み(シリアライズ)時に、指定した型をシングルラインにする /// /// /// [ /// 1, /// 2, /// 3 /// ] /// ↓ /// [1,2,3] /// public class SingleLineJsonConverter : JsonConverter { /// /// シングルライン化する型 /// private readonly Type[] _types; public SingleLineJsonConverter(params Type[] types) { _types = types; } /// /// シリアライズ処理 /// /// /// /// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { // 直前の「自動インデント」設定を記憶 var formattingBackup = writer.Formatting; // 「自動インデント」をOFF(シングルライン書き込みモードにする) writer.Formatting = Formatting.None; // 書き込む JToken t = JToken.FromObject(value); t.WriteTo(writer); // 設定を戻す writer.Formatting = formattingBackup; } /// /// このクラスはデシリアライズ時を想定していない /// /// /// /// /// /// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { throw new NotImplementedException(); } public override bool CanConvert(Type objectType) { return _types.Any(t => t == objectType); } } }