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(); JsonMapper.conv_ops = new Dictionary>(); JsonMapper.object_metadata = new Dictionary(); JsonMapper.type_properties = new Dictionary>(); JsonMapper.static_writer = new JsonWriter(); JsonMapper.datetime_format = DateTimeFormatInfo.InvariantInfo; JsonMapper.base_exporters_table = new Dictionary(); JsonMapper.custom_exporters_table = new Dictionary(); JsonMapper.base_importers_table = new Dictionary>(); JsonMapper.custom_importers_table = new Dictionary>(); 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(); 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 list = new List(); 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()); } } 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 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 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 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 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 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 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 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 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 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> table, Type json_type, Type value_type, ImporterFunc importer) { if (!table.ContainsKey(json_type)) { table.Add(json_type, new Dictionary()); } 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 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(JsonReader reader) { return (T)((object)JsonMapper.ReadValue(typeof(T), reader)); } public static T ToObject(TextReader reader) { JsonReader reader2 = new JsonReader(reader); return (T)((object)JsonMapper.ReadValue(typeof(T), reader2)); } public static T ToObject(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(ExporterFunc exporter) { ExporterFunc value = delegate(object obj, JsonWriter writer) { exporter((T)((object)obj), writer); }; JsonMapper.custom_exporters_table[typeof(T)] = value; } public static void RegisterImporter(ImporterFunc 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 base_exporters_table; private static IDictionary custom_exporters_table; private static IDictionary> base_importers_table; private static IDictionary> custom_importers_table; private static IDictionary array_metadata; private static readonly object array_metadata_lock = new object(); private static IDictionary> conv_ops; private static readonly object conv_ops_lock = new object(); private static IDictionary object_metadata; private static readonly object object_metadata_lock = new object(); private static IDictionary> 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; } }