123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Globalization;
- using System.IO;
- using System.Reflection;
- using System.Runtime.CompilerServices;
- using UnityEngine;
- namespace LitJson
- {
- public class JsonMapper
- {
- static JsonMapper()
- {
- JsonMapper.max_nesting_depth = 100;
- JsonMapper.array_metadata = new Dictionary<Type, ArrayMetadata>();
- JsonMapper.conv_ops = new Dictionary<Type, IDictionary<Type, MethodInfo>>();
- JsonMapper.object_metadata = new Dictionary<Type, ObjectMetadata>();
- JsonMapper.type_properties = new Dictionary<Type, IList<PropertyMetadata>>();
- JsonMapper.static_writer = new JsonWriter();
- JsonMapper.datetime_format = DateTimeFormatInfo.InvariantInfo;
- JsonMapper.base_exporters_table = new Dictionary<Type, ExporterFunc>();
- JsonMapper.custom_exporters_table = new Dictionary<Type, ExporterFunc>();
- JsonMapper.base_importers_table = new Dictionary<Type, IDictionary<Type, ImporterFunc>>();
- JsonMapper.custom_importers_table = new Dictionary<Type, IDictionary<Type, ImporterFunc>>();
- JsonMapper.RegisterBaseExporters();
- JsonMapper.RegisterBaseImporters();
- }
- private static void AddArrayMetadata(Type type)
- {
- if (JsonMapper.array_metadata.ContainsKey(type))
- {
- return;
- }
- ArrayMetadata value = default(ArrayMetadata);
- value.IsArray = type.IsArray;
- if (type.GetInterface("System.Collections.IList") != null)
- {
- value.IsList = true;
- }
- foreach (PropertyInfo propertyInfo in type.GetProperties())
- {
- if (!(propertyInfo.Name != "Item"))
- {
- ParameterInfo[] indexParameters = propertyInfo.GetIndexParameters();
- if (indexParameters.Length == 1)
- {
- if (indexParameters[0].ParameterType == typeof(int))
- {
- value.ElementType = propertyInfo.PropertyType;
- }
- }
- }
- }
- object obj = JsonMapper.array_metadata_lock;
- lock (obj)
- {
- try
- {
- JsonMapper.array_metadata.Add(type, value);
- }
- catch (ArgumentException)
- {
- }
- }
- }
- private static void AddObjectMetadata(Type type)
- {
- if (JsonMapper.object_metadata.ContainsKey(type))
- {
- return;
- }
- ObjectMetadata value = default(ObjectMetadata);
- if (type.GetInterface("System.Collections.IDictionary") != null)
- {
- value.IsDictionary = true;
- }
- value.Properties = new Dictionary<string, PropertyMetadata>();
- foreach (PropertyInfo propertyInfo in type.GetProperties())
- {
- if (propertyInfo.Name == "Item")
- {
- ParameterInfo[] indexParameters = propertyInfo.GetIndexParameters();
- if (indexParameters.Length == 1)
- {
- if (indexParameters[0].ParameterType == typeof(string))
- {
- value.ElementType = propertyInfo.PropertyType;
- }
- }
- }
- else
- {
- PropertyMetadata value2 = default(PropertyMetadata);
- value2.Info = propertyInfo;
- value2.Type = propertyInfo.PropertyType;
- value.Properties.Add(propertyInfo.Name, value2);
- }
- }
- foreach (FieldInfo fieldInfo in type.GetFields())
- {
- PropertyMetadata value3 = default(PropertyMetadata);
- value3.Info = fieldInfo;
- value3.IsField = true;
- value3.Type = fieldInfo.FieldType;
- value.Properties.Add(fieldInfo.Name, value3);
- }
- object obj = JsonMapper.object_metadata_lock;
- lock (obj)
- {
- try
- {
- JsonMapper.object_metadata.Add(type, value);
- }
- catch (ArgumentException)
- {
- }
- }
- }
- private static void AddTypeProperties(Type type)
- {
- if (JsonMapper.type_properties.ContainsKey(type))
- {
- return;
- }
- IList<PropertyMetadata> list = new List<PropertyMetadata>();
- foreach (PropertyInfo propertyInfo in type.GetProperties())
- {
- if (!(propertyInfo.Name == "Item"))
- {
- list.Add(new PropertyMetadata
- {
- Info = propertyInfo,
- IsField = false
- });
- }
- }
- foreach (FieldInfo info in type.GetFields())
- {
- list.Add(new PropertyMetadata
- {
- Info = info,
- IsField = true
- });
- }
- object obj = JsonMapper.type_properties_lock;
- lock (obj)
- {
- try
- {
- JsonMapper.type_properties.Add(type, list);
- }
- catch (ArgumentException)
- {
- }
- }
- }
- private static MethodInfo GetConvOp(Type t1, Type t2)
- {
- object obj = JsonMapper.conv_ops_lock;
- lock (obj)
- {
- if (!JsonMapper.conv_ops.ContainsKey(t1))
- {
- JsonMapper.conv_ops.Add(t1, new Dictionary<Type, MethodInfo>());
- }
- }
- if (JsonMapper.conv_ops[t1].ContainsKey(t2))
- {
- return JsonMapper.conv_ops[t1][t2];
- }
- MethodInfo method = t1.GetMethod("op_Implicit", new Type[]
- {
- t2
- });
- object obj2 = JsonMapper.conv_ops_lock;
- lock (obj2)
- {
- try
- {
- JsonMapper.conv_ops[t1].Add(t2, method);
- }
- catch (ArgumentException)
- {
- return JsonMapper.conv_ops[t1][t2];
- }
- }
- return method;
- }
- private static object ReadValue(Type inst_type, JsonReader reader)
- {
- reader.Read();
- if (reader.Token == JsonToken.ArrayEnd)
- {
- return null;
- }
- Type underlyingType = Nullable.GetUnderlyingType(inst_type);
- Type type = underlyingType ?? inst_type;
- if (reader.Token == JsonToken.Null)
- {
- if (inst_type.IsClass || underlyingType != null)
- {
- return null;
- }
- throw new JsonException(string.Format("Can't assign null to an instance of type {0}", inst_type));
- }
- else
- {
- if (reader.Token != JsonToken.Double && reader.Token != JsonToken.Int && reader.Token != JsonToken.Long && reader.Token != JsonToken.String && reader.Token != JsonToken.Boolean)
- {
- object obj = null;
- if (reader.Token == JsonToken.ArrayStart)
- {
- JsonMapper.AddArrayMetadata(inst_type);
- ArrayMetadata arrayMetadata = JsonMapper.array_metadata[inst_type];
- if (!arrayMetadata.IsArray && !arrayMetadata.IsList)
- {
- throw new JsonException(string.Format("Type {0} can't act as an array", inst_type));
- }
- IList list;
- Type elementType;
- if (!arrayMetadata.IsArray)
- {
- list = (IList)Activator.CreateInstance(inst_type);
- elementType = arrayMetadata.ElementType;
- }
- else
- {
- list = new ArrayList();
- elementType = inst_type.GetElementType();
- }
- for (;;)
- {
- object obj2 = JsonMapper.ReadValue(elementType, reader);
- if (obj2 == null && reader.Token == JsonToken.ArrayEnd)
- {
- break;
- }
- list.Add(obj2);
- }
- if (arrayMetadata.IsArray)
- {
- int count = list.Count;
- obj = Array.CreateInstance(elementType, count);
- for (int i = 0; i < count; i++)
- {
- ((Array)obj).SetValue(list[i], i);
- }
- }
- else
- {
- obj = list;
- }
- }
- else if (reader.Token == JsonToken.ObjectStart)
- {
- JsonMapper.AddObjectMetadata(type);
- ObjectMetadata objectMetadata = JsonMapper.object_metadata[type];
- obj = Activator.CreateInstance(type);
- string text;
- for (;;)
- {
- reader.Read();
- if (reader.Token == JsonToken.ObjectEnd)
- {
- break;
- }
- text = (string)reader.Value;
- if (objectMetadata.Properties.ContainsKey(text))
- {
- PropertyMetadata propertyMetadata = objectMetadata.Properties[text];
- if (propertyMetadata.IsField)
- {
- ((FieldInfo)propertyMetadata.Info).SetValue(obj, JsonMapper.ReadValue(propertyMetadata.Type, reader));
- }
- else
- {
- PropertyInfo propertyInfo = (PropertyInfo)propertyMetadata.Info;
- if (propertyInfo.CanWrite)
- {
- propertyInfo.SetValue(obj, JsonMapper.ReadValue(propertyMetadata.Type, reader), null);
- }
- else
- {
- JsonMapper.ReadValue(propertyMetadata.Type, reader);
- }
- }
- }
- else if (!objectMetadata.IsDictionary)
- {
- if (!reader.SkipNonMembers)
- {
- goto Block_32;
- }
- JsonMapper.ReadSkip(reader);
- }
- else
- {
- ((IDictionary)obj).Add(text, JsonMapper.ReadValue(objectMetadata.ElementType, reader));
- }
- }
- return obj;
- Block_32:
- throw new JsonException(string.Format("The type {0} doesn't have the property '{1}'", inst_type, text));
- }
- return obj;
- }
- Type type2 = reader.Value.GetType();
- if (type.IsAssignableFrom(type2))
- {
- return reader.Value;
- }
- if (inst_type == typeof(float) && type2 == typeof(double))
- {
- return (float)((double)reader.Value);
- }
- if (JsonMapper.custom_importers_table.ContainsKey(type2) && JsonMapper.custom_importers_table[type2].ContainsKey(type))
- {
- ImporterFunc importerFunc = JsonMapper.custom_importers_table[type2][type];
- return importerFunc(reader.Value);
- }
- if (JsonMapper.base_importers_table.ContainsKey(type2) && JsonMapper.base_importers_table[type2].ContainsKey(type))
- {
- ImporterFunc importerFunc2 = JsonMapper.base_importers_table[type2][type];
- return importerFunc2(reader.Value);
- }
- if (type.IsEnum)
- {
- return Enum.ToObject(type, reader.Value);
- }
- MethodInfo convOp = JsonMapper.GetConvOp(type, type2);
- if (convOp != null)
- {
- return convOp.Invoke(null, new object[]
- {
- reader.Value
- });
- }
- throw new JsonException(string.Format("Can't assign value '{0}' (type {1}) to type {2}", reader.Value, type2, inst_type));
- }
- }
- private static IJsonWrapper ReadValue(WrapperFactory factory, JsonReader reader)
- {
- reader.Read();
- if (reader.Token == JsonToken.ArrayEnd || reader.Token == JsonToken.Null)
- {
- return null;
- }
- IJsonWrapper jsonWrapper = factory();
- if (reader.Token == JsonToken.String)
- {
- jsonWrapper.SetString((string)reader.Value);
- return jsonWrapper;
- }
- if (reader.Token == JsonToken.Double)
- {
- jsonWrapper.SetDouble((double)reader.Value);
- return jsonWrapper;
- }
- if (reader.Token == JsonToken.Int)
- {
- jsonWrapper.SetInt((int)reader.Value);
- return jsonWrapper;
- }
- if (reader.Token == JsonToken.Long)
- {
- jsonWrapper.SetLong((long)reader.Value);
- return jsonWrapper;
- }
- if (reader.Token == JsonToken.Boolean)
- {
- jsonWrapper.SetBoolean((bool)reader.Value);
- return jsonWrapper;
- }
- if (reader.Token == JsonToken.ArrayStart)
- {
- jsonWrapper.SetJsonType(JsonType.Array);
- for (;;)
- {
- IJsonWrapper jsonWrapper2 = JsonMapper.ReadValue(factory, reader);
- if (jsonWrapper2 == null && reader.Token == JsonToken.ArrayEnd)
- {
- break;
- }
- jsonWrapper.Add(jsonWrapper2);
- }
- }
- else if (reader.Token == JsonToken.ObjectStart)
- {
- jsonWrapper.SetJsonType(JsonType.Object);
- for (;;)
- {
- reader.Read();
- if (reader.Token == JsonToken.ObjectEnd)
- {
- break;
- }
- string key = (string)reader.Value;
- jsonWrapper[key] = JsonMapper.ReadValue(factory, reader);
- }
- }
- return jsonWrapper;
- }
- private static void ReadSkip(JsonReader reader)
- {
- JsonMapper.ToWrapper(() => new JsonMockWrapper(), reader);
- }
- private static void RegisterBaseExporters()
- {
- JsonMapper.base_exporters_table[typeof(byte)] = delegate(object obj, JsonWriter writer)
- {
- writer.Write(Convert.ToInt32((byte)obj));
- };
- JsonMapper.base_exporters_table[typeof(char)] = delegate(object obj, JsonWriter writer)
- {
- writer.Write(Convert.ToString((char)obj));
- };
- JsonMapper.base_exporters_table[typeof(DateTime)] = delegate(object obj, JsonWriter writer)
- {
- writer.Write(Convert.ToString((DateTime)obj, JsonMapper.datetime_format));
- };
- JsonMapper.base_exporters_table[typeof(decimal)] = delegate(object obj, JsonWriter writer)
- {
- writer.Write((decimal)obj);
- };
- JsonMapper.base_exporters_table[typeof(sbyte)] = delegate(object obj, JsonWriter writer)
- {
- writer.Write(Convert.ToInt32((sbyte)obj));
- };
- JsonMapper.base_exporters_table[typeof(short)] = delegate(object obj, JsonWriter writer)
- {
- writer.Write(Convert.ToInt32((short)obj));
- };
- JsonMapper.base_exporters_table[typeof(ushort)] = delegate(object obj, JsonWriter writer)
- {
- writer.Write(Convert.ToInt32((ushort)obj));
- };
- JsonMapper.base_exporters_table[typeof(uint)] = delegate(object obj, JsonWriter writer)
- {
- writer.Write(Convert.ToUInt64((uint)obj));
- };
- JsonMapper.base_exporters_table[typeof(ulong)] = delegate(object obj, JsonWriter writer)
- {
- writer.Write((ulong)obj);
- };
- IDictionary<Type, ExporterFunc> dictionary = JsonMapper.base_exporters_table;
- Type typeFromHandle = typeof(Vector2);
- if (JsonMapper._003C_003Ef__mg_0024cache0 == null)
- {
- JsonMapper._003C_003Ef__mg_0024cache0 = new ExporterFunc(JsonMapper.ExportVector2);
- }
- dictionary[typeFromHandle] = JsonMapper._003C_003Ef__mg_0024cache0;
- IDictionary<Type, ExporterFunc> dictionary2 = JsonMapper.base_exporters_table;
- Type typeFromHandle2 = typeof(Vector3);
- if (JsonMapper._003C_003Ef__mg_0024cache1 == null)
- {
- JsonMapper._003C_003Ef__mg_0024cache1 = new ExporterFunc(JsonMapper.ExportVector3);
- }
- dictionary2[typeFromHandle2] = JsonMapper._003C_003Ef__mg_0024cache1;
- IDictionary<Type, ExporterFunc> dictionary3 = JsonMapper.base_exporters_table;
- Type typeFromHandle3 = typeof(Vector4);
- if (JsonMapper._003C_003Ef__mg_0024cache2 == null)
- {
- JsonMapper._003C_003Ef__mg_0024cache2 = new ExporterFunc(JsonMapper.ExportVector4);
- }
- dictionary3[typeFromHandle3] = JsonMapper._003C_003Ef__mg_0024cache2;
- IDictionary<Type, ExporterFunc> dictionary4 = JsonMapper.base_exporters_table;
- Type typeFromHandle4 = typeof(Bounds);
- if (JsonMapper._003C_003Ef__mg_0024cache3 == null)
- {
- JsonMapper._003C_003Ef__mg_0024cache3 = new ExporterFunc(JsonMapper.ExportBounds);
- }
- dictionary4[typeFromHandle4] = JsonMapper._003C_003Ef__mg_0024cache3;
- IDictionary<Type, ExporterFunc> dictionary5 = JsonMapper.base_exporters_table;
- Type typeFromHandle5 = typeof(Color);
- if (JsonMapper._003C_003Ef__mg_0024cache4 == null)
- {
- JsonMapper._003C_003Ef__mg_0024cache4 = new ExporterFunc(JsonMapper.ExportColor);
- }
- dictionary5[typeFromHandle5] = JsonMapper._003C_003Ef__mg_0024cache4;
- IDictionary<Type, ExporterFunc> dictionary6 = JsonMapper.base_exporters_table;
- Type typeFromHandle6 = typeof(Color32);
- if (JsonMapper._003C_003Ef__mg_0024cache5 == null)
- {
- JsonMapper._003C_003Ef__mg_0024cache5 = new ExporterFunc(JsonMapper.ExportColor32);
- }
- dictionary6[typeFromHandle6] = JsonMapper._003C_003Ef__mg_0024cache5;
- IDictionary<Type, ExporterFunc> dictionary7 = JsonMapper.base_exporters_table;
- Type typeFromHandle7 = typeof(Ray);
- if (JsonMapper._003C_003Ef__mg_0024cache6 == null)
- {
- JsonMapper._003C_003Ef__mg_0024cache6 = new ExporterFunc(JsonMapper.ExportRay);
- }
- dictionary7[typeFromHandle7] = JsonMapper._003C_003Ef__mg_0024cache6;
- IDictionary<Type, ExporterFunc> dictionary8 = JsonMapper.base_exporters_table;
- Type typeFromHandle8 = typeof(Rect);
- if (JsonMapper._003C_003Ef__mg_0024cache7 == null)
- {
- JsonMapper._003C_003Ef__mg_0024cache7 = new ExporterFunc(JsonMapper.ExportRect);
- }
- dictionary8[typeFromHandle8] = JsonMapper._003C_003Ef__mg_0024cache7;
- IDictionary<Type, ExporterFunc> dictionary9 = JsonMapper.base_exporters_table;
- Type typeFromHandle9 = typeof(Quaternion);
- if (JsonMapper._003C_003Ef__mg_0024cache8 == null)
- {
- JsonMapper._003C_003Ef__mg_0024cache8 = new ExporterFunc(JsonMapper.ExportQuaternion);
- }
- dictionary9[typeFromHandle9] = JsonMapper._003C_003Ef__mg_0024cache8;
- }
- private static void ExportVector2(object obj, JsonWriter writer)
- {
- Vector2 vector = (Vector2)obj;
- writer.WriteObjectStart();
- writer.WritePropertyName("x");
- writer.Write((double)vector.x);
- writer.WritePropertyName("y");
- writer.Write((double)vector.y);
- writer.WriteObjectEnd();
- }
- private static void ExportVector3(object obj, JsonWriter writer)
- {
- Vector3 vector = (Vector3)obj;
- writer.WriteObjectStart();
- writer.WritePropertyName("x");
- writer.Write((double)vector.x);
- writer.WritePropertyName("y");
- writer.Write((double)vector.y);
- writer.WritePropertyName("z");
- writer.Write((double)vector.z);
- writer.WriteObjectEnd();
- }
- private static void ExportVector4(object obj, JsonWriter writer)
- {
- Vector4 vector = (Vector4)obj;
- writer.WriteObjectStart();
- writer.WritePropertyName("x");
- writer.Write((double)vector.x);
- writer.WritePropertyName("y");
- writer.Write((double)vector.y);
- writer.WritePropertyName("z");
- writer.Write((double)vector.z);
- writer.WritePropertyName("w");
- writer.Write((double)vector.w);
- writer.WriteObjectEnd();
- }
- private static void ExportBounds(object obj, JsonWriter writer)
- {
- Bounds bounds = (Bounds)obj;
- writer.WriteObjectStart();
- writer.WritePropertyName("center");
- JsonMapper.ExportVector3(bounds.center, writer);
- writer.WritePropertyName("size");
- JsonMapper.ExportVector3(bounds.size, writer);
- writer.WriteObjectEnd();
- }
- private static void ExportColor(object obj, JsonWriter writer)
- {
- Color color = (Color)obj;
- writer.WriteObjectStart();
- writer.WritePropertyName("r");
- writer.Write((double)color.r);
- writer.WritePropertyName("g");
- writer.Write((double)color.g);
- writer.WritePropertyName("b");
- writer.Write((double)color.b);
- writer.WritePropertyName("a");
- writer.Write((double)color.a);
- writer.WriteObjectEnd();
- }
- private static void ExportColor32(object obj, JsonWriter writer)
- {
- Color32 color = (Color32)obj;
- writer.WriteObjectStart();
- writer.WritePropertyName("r");
- writer.Write((int)color.r);
- writer.WritePropertyName("g");
- writer.Write((int)color.g);
- writer.WritePropertyName("b");
- writer.Write((int)color.b);
- writer.WritePropertyName("a");
- writer.Write((int)color.a);
- writer.WriteObjectEnd();
- }
- private static void ExportRay(object obj, JsonWriter writer)
- {
- Ray ray = (Ray)obj;
- writer.WriteObjectStart();
- writer.WritePropertyName("origin");
- JsonMapper.ExportVector3(ray.origin, writer);
- writer.WritePropertyName("direction");
- JsonMapper.ExportVector3(ray.direction, writer);
- writer.WriteObjectEnd();
- }
- private static void ExportRect(object obj, JsonWriter writer)
- {
- Rect rect = (Rect)obj;
- writer.WriteObjectStart();
- writer.WritePropertyName("xMin");
- writer.Write((double)rect.xMin);
- writer.WritePropertyName("xMax");
- writer.Write((double)rect.xMax);
- writer.WritePropertyName("yMin");
- writer.Write((double)rect.yMin);
- writer.WritePropertyName("yMax");
- writer.Write((double)rect.yMax);
- writer.WriteObjectEnd();
- }
- private static void ExportQuaternion(object obj, JsonWriter writer)
- {
- Quaternion quaternion = (Quaternion)obj;
- writer.WriteObjectStart();
- writer.WritePropertyName("x");
- writer.Write((double)quaternion.x);
- writer.WritePropertyName("y");
- writer.Write((double)quaternion.y);
- writer.WritePropertyName("z");
- writer.Write((double)quaternion.z);
- writer.WritePropertyName("w");
- writer.Write((double)quaternion.w);
- writer.WriteObjectEnd();
- }
- private static void RegisterBaseImporters()
- {
- ImporterFunc importer = (object input) => Convert.ToByte((int)input);
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(int), typeof(byte), importer);
- importer = ((object input) => Convert.ToUInt64((int)input));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(int), typeof(ulong), importer);
- importer = ((object input) => Convert.ToSByte((int)input));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(int), typeof(sbyte), importer);
- importer = ((object input) => Convert.ToInt16((int)input));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(int), typeof(short), importer);
- importer = ((object input) => Convert.ToUInt16((int)input));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(int), typeof(ushort), importer);
- importer = ((object input) => Convert.ToUInt32((int)input));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(int), typeof(uint), importer);
- importer = ((object input) => Convert.ToSingle((int)input));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(int), typeof(float), importer);
- importer = ((object input) => Convert.ToDouble((int)input));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(int), typeof(double), importer);
- importer = ((object input) => Convert.ToDecimal((double)input));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(double), typeof(decimal), importer);
- importer = ((object input) => Convert.ToUInt32((long)input));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(long), typeof(uint), importer);
- importer = ((object input) => Convert.ToChar((string)input));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(string), typeof(char), importer);
- importer = ((object input) => Convert.ToDateTime((string)input, JsonMapper.datetime_format));
- JsonMapper.RegisterImporter(JsonMapper.base_importers_table, typeof(string), typeof(DateTime), importer);
- }
- private static void RegisterImporter(IDictionary<Type, IDictionary<Type, ImporterFunc>> table, Type json_type, Type value_type, ImporterFunc importer)
- {
- if (!table.ContainsKey(json_type))
- {
- table.Add(json_type, new Dictionary<Type, ImporterFunc>());
- }
- table[json_type][value_type] = importer;
- }
- private static void WriteValue(object obj, JsonWriter writer, bool writer_is_private, int depth)
- {
- if (depth > JsonMapper.max_nesting_depth)
- {
- throw new JsonException(string.Format("Max allowed object depth reached while trying to export from type {0}", obj.GetType()));
- }
- if (obj == null)
- {
- writer.Write(null);
- return;
- }
- if (obj is IJsonWrapper)
- {
- if (writer_is_private)
- {
- writer.TextWriter.Write(((IJsonWrapper)obj).ToJson());
- }
- else
- {
- ((IJsonWrapper)obj).ToJson(writer);
- }
- return;
- }
- if (obj is string)
- {
- writer.Write((string)obj);
- return;
- }
- if (obj is double)
- {
- writer.Write((double)obj);
- return;
- }
- if (obj is float)
- {
- writer.Write((double)((float)obj));
- return;
- }
- if (obj is int)
- {
- writer.Write((int)obj);
- return;
- }
- if (obj is bool)
- {
- writer.Write((bool)obj);
- return;
- }
- if (obj is long)
- {
- writer.Write((long)obj);
- return;
- }
- if (obj is Array)
- {
- writer.WriteArrayStart();
- IEnumerator enumerator = ((Array)obj).GetEnumerator();
- try
- {
- while (enumerator.MoveNext())
- {
- object obj2 = enumerator.Current;
- JsonMapper.WriteValue(obj2, writer, writer_is_private, depth + 1);
- }
- }
- finally
- {
- IDisposable disposable;
- if ((disposable = (enumerator as IDisposable)) != null)
- {
- disposable.Dispose();
- }
- }
- writer.WriteArrayEnd();
- return;
- }
- if (obj is IList)
- {
- writer.WriteArrayStart();
- IEnumerator enumerator2 = ((IList)obj).GetEnumerator();
- try
- {
- while (enumerator2.MoveNext())
- {
- object obj3 = enumerator2.Current;
- JsonMapper.WriteValue(obj3, writer, writer_is_private, depth + 1);
- }
- }
- finally
- {
- IDisposable disposable2;
- if ((disposable2 = (enumerator2 as IDisposable)) != null)
- {
- disposable2.Dispose();
- }
- }
- writer.WriteArrayEnd();
- return;
- }
- if (obj is IDictionary)
- {
- writer.WriteObjectStart();
- IDictionaryEnumerator enumerator3 = ((IDictionary)obj).GetEnumerator();
- try
- {
- while (enumerator3.MoveNext())
- {
- object obj4 = enumerator3.Current;
- DictionaryEntry dictionaryEntry = (DictionaryEntry)obj4;
- writer.WritePropertyName((string)dictionaryEntry.Key);
- JsonMapper.WriteValue(dictionaryEntry.Value, writer, writer_is_private, depth + 1);
- }
- }
- finally
- {
- IDisposable disposable3;
- if ((disposable3 = (enumerator3 as IDisposable)) != null)
- {
- disposable3.Dispose();
- }
- }
- writer.WriteObjectEnd();
- return;
- }
- Type type = obj.GetType();
- if (JsonMapper.custom_exporters_table.ContainsKey(type))
- {
- ExporterFunc exporterFunc = JsonMapper.custom_exporters_table[type];
- exporterFunc(obj, writer);
- return;
- }
- if (JsonMapper.base_exporters_table.ContainsKey(type))
- {
- ExporterFunc exporterFunc2 = JsonMapper.base_exporters_table[type];
- exporterFunc2(obj, writer);
- return;
- }
- if (obj is Enum)
- {
- Type underlyingType = Enum.GetUnderlyingType(type);
- if (underlyingType == typeof(long) || underlyingType == typeof(uint) || underlyingType == typeof(ulong))
- {
- writer.Write((ulong)obj);
- }
- else
- {
- writer.Write((int)obj);
- }
- return;
- }
- JsonMapper.AddTypeProperties(type);
- IList<PropertyMetadata> list = JsonMapper.type_properties[type];
- writer.WriteObjectStart();
- foreach (PropertyMetadata propertyMetadata in list)
- {
- if (propertyMetadata.IsField)
- {
- writer.WritePropertyName(propertyMetadata.Info.Name);
- JsonMapper.WriteValue(((FieldInfo)propertyMetadata.Info).GetValue(obj), writer, writer_is_private, depth + 1);
- }
- else
- {
- PropertyInfo propertyInfo = (PropertyInfo)propertyMetadata.Info;
- if (propertyInfo.CanRead)
- {
- writer.WritePropertyName(propertyMetadata.Info.Name);
- JsonMapper.WriteValue(propertyInfo.GetValue(obj, null), writer, writer_is_private, depth + 1);
- }
- }
- }
- writer.WriteObjectEnd();
- }
- public static string ToJson(object obj)
- {
- object obj2 = JsonMapper.static_writer_lock;
- string result;
- lock (obj2)
- {
- JsonMapper.static_writer.Reset();
- JsonMapper.WriteValue(obj, JsonMapper.static_writer, true, 0);
- result = JsonMapper.static_writer.ToString();
- }
- return result;
- }
- public static void ToJson(object obj, JsonWriter writer)
- {
- JsonMapper.WriteValue(obj, writer, false, 0);
- }
- public static JsonData ToObject(JsonReader reader)
- {
- return (JsonData)JsonMapper.ToWrapper(() => new JsonData(), reader);
- }
- public static JsonData ToObject(TextReader reader)
- {
- JsonReader reader2 = new JsonReader(reader);
- return (JsonData)JsonMapper.ToWrapper(() => new JsonData(), reader2);
- }
- public static JsonData ToObject(string json)
- {
- return (JsonData)JsonMapper.ToWrapper(() => new JsonData(), json);
- }
- public static T ToObject<T>(JsonReader reader)
- {
- return (T)((object)JsonMapper.ReadValue(typeof(T), reader));
- }
- public static T ToObject<T>(TextReader reader)
- {
- JsonReader reader2 = new JsonReader(reader);
- return (T)((object)JsonMapper.ReadValue(typeof(T), reader2));
- }
- public static T ToObject<T>(string json)
- {
- JsonReader reader = new JsonReader(json);
- return (T)((object)JsonMapper.ReadValue(typeof(T), reader));
- }
- public static IJsonWrapper ToWrapper(WrapperFactory factory, JsonReader reader)
- {
- return JsonMapper.ReadValue(factory, reader);
- }
- public static IJsonWrapper ToWrapper(WrapperFactory factory, string json)
- {
- JsonReader reader = new JsonReader(json);
- return JsonMapper.ReadValue(factory, reader);
- }
- public static void RegisterExporter<T>(ExporterFunc<T> exporter)
- {
- ExporterFunc value = delegate(object obj, JsonWriter writer)
- {
- exporter((T)((object)obj), writer);
- };
- JsonMapper.custom_exporters_table[typeof(T)] = value;
- }
- public static void RegisterImporter<TJson, TValue>(ImporterFunc<TJson, TValue> importer)
- {
- ImporterFunc importer2 = (object input) => importer((TJson)((object)input));
- JsonMapper.RegisterImporter(JsonMapper.custom_importers_table, typeof(TJson), typeof(TValue), importer2);
- }
- public static void UnregisterExporters()
- {
- JsonMapper.custom_exporters_table.Clear();
- }
- public static void UnregisterImporters()
- {
- JsonMapper.custom_importers_table.Clear();
- }
- private static int max_nesting_depth;
- private static IFormatProvider datetime_format;
- private static IDictionary<Type, ExporterFunc> base_exporters_table;
- private static IDictionary<Type, ExporterFunc> custom_exporters_table;
- private static IDictionary<Type, IDictionary<Type, ImporterFunc>> base_importers_table;
- private static IDictionary<Type, IDictionary<Type, ImporterFunc>> custom_importers_table;
- private static IDictionary<Type, ArrayMetadata> array_metadata;
- private static readonly object array_metadata_lock = new object();
- private static IDictionary<Type, IDictionary<Type, MethodInfo>> conv_ops;
- private static readonly object conv_ops_lock = new object();
- private static IDictionary<Type, ObjectMetadata> object_metadata;
- private static readonly object object_metadata_lock = new object();
- private static IDictionary<Type, IList<PropertyMetadata>> type_properties;
- private static readonly object type_properties_lock = new object();
- private static JsonWriter static_writer;
- private static readonly object static_writer_lock = new object();
- [CompilerGenerated]
- private static ExporterFunc _003C_003Ef__mg_0024cache0;
- [CompilerGenerated]
- private static ExporterFunc _003C_003Ef__mg_0024cache1;
- [CompilerGenerated]
- private static ExporterFunc _003C_003Ef__mg_0024cache2;
- [CompilerGenerated]
- private static ExporterFunc _003C_003Ef__mg_0024cache3;
- [CompilerGenerated]
- private static ExporterFunc _003C_003Ef__mg_0024cache4;
- [CompilerGenerated]
- private static ExporterFunc _003C_003Ef__mg_0024cache5;
- [CompilerGenerated]
- private static ExporterFunc _003C_003Ef__mg_0024cache6;
- [CompilerGenerated]
- private static ExporterFunc _003C_003Ef__mg_0024cache7;
- [CompilerGenerated]
- private static ExporterFunc _003C_003Ef__mg_0024cache8;
- }
- }
|