using System; using System.Collections.Generic; using LC.Newtonsoft.Json; namespace TapTap.Common.Internal.Json { public class TapJsonConverter : JsonConverter { public override bool CanConvert(Type objectType) { return objectType == typeof(object); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { serializer.Serialize(writer, value); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.StartObject) { var obj = new Dictionary(); serializer.Populate(reader, obj); return obj; } if (reader.TokenType == JsonToken.StartArray) { var arr = new List(); serializer.Populate(reader, arr); return arr; } if (reader.TokenType == JsonToken.Integer) { if ((long)reader.Value < int.MaxValue) { return Convert.ToInt32(reader.Value); } } if (reader.TokenType == JsonToken.Float) { return Convert.ToSingle(reader.Value); } return serializer.Deserialize(reader); } public readonly static TapJsonConverter Default = new TapJsonConverter(); } }