using LitJson; using System; using Newtonsoft.Json; using System.Collections; namespace ThinkingData.Analytics { public class MyJsonDataConverter : JsonConverter { public override bool CanConvert(Type objectType) { return typeof(JsonData) == objectType; } public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { throw new NotImplementedException(); } public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, JsonSerializer serializer) { var jsonData = value as JsonData; WriteJson(jsonData, writer); } private void WriteJson(IJsonWrapper obj, Newtonsoft.Json.JsonWriter writer) { if (obj == null) { writer.WriteNull(); return; } if (obj.IsString) { writer.WriteValue(obj.GetString()); return; } if (obj.IsBoolean) { writer.WriteValue(obj.GetBoolean()); return; } if (obj.IsDouble) { writer.WriteValue(obj.GetDouble()); return; } if (obj.IsInt) { writer.WriteValue(obj.GetInt()); return; } if (obj.IsLong) { writer.WriteValue(obj.GetLong()); return; } if (obj.IsArray) { writer.WriteStartArray(); foreach (object elem in (IList)obj) WriteJson((JsonData)elem, writer); writer.WriteEndArray(); return; } if (obj.IsObject) { writer.WriteStartObject(); foreach (DictionaryEntry entry in ((IDictionary)obj)) { writer.WritePropertyName((string)entry.Key); WriteJson((JsonData)entry.Value, writer); } writer.WriteEndObject(); return; } } } }