using System; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json; namespace CryptoExchange.Net { public abstract class BaseConverter: JsonConverter { protected abstract Dictionary Mapping { get; } private readonly bool quotes; protected BaseConverter(bool useQuotes) { quotes = useQuotes; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (quotes) writer.WriteValue(Mapping[(T)value]); else writer.WriteRawValue(Mapping[(T)value]); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var val = Mapping.Single(v => v.Value == reader.Value.ToString()).Key; if (val != null) return val; return Mapping.Single(v => v.Value.ToLower() == reader.Value.ToString().ToLower()); } public T ReadString(string data) { return Mapping.Single(v => v.Value == data).Key; } public override bool CanConvert(Type objectType) { return objectType == typeof(T); } } }