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);
}
}
}