You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

89 lines
2.3 KiB

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