using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Runtime.Serialization; using System.Text; using SimpleJson.Reflection; namespace SimpleJson { // Token: 0x020002E3 RID: 739 [GeneratedCode("simple-json", "1.0.0")] internal static class SimpleJson { // Token: 0x06003091 RID: 12433 RVA: 0x00046F90 File Offset: 0x00045190 public static object DeserializeObject(string json) { object obj; if (SimpleJson.TryDeserializeObject(json, out obj)) { return obj; } throw new SerializationException("Invalid JSON string"); } // Token: 0x06003092 RID: 12434 RVA: 0x00046FC0 File Offset: 0x000451C0 public static bool TryDeserializeObject(string json, out object obj) { bool flag = true; if (json != null) { char[] array = json.ToCharArray(); int num = 0; obj = SimpleJson.ParseValue(array, ref num, ref flag); } else { obj = null; } return flag; } // Token: 0x06003093 RID: 12435 RVA: 0x00047000 File Offset: 0x00045200 public static object DeserializeObject(string json, Type type, IJsonSerializerStrategy jsonSerializerStrategy) { object obj = SimpleJson.DeserializeObject(json); return (type != null && (obj == null || !ReflectionUtils.IsAssignableFrom(obj.GetType(), type))) ? (jsonSerializerStrategy ?? SimpleJson.CurrentJsonSerializerStrategy).DeserializeObject(obj, type) : obj; } // Token: 0x06003094 RID: 12436 RVA: 0x00047054 File Offset: 0x00045254 public static object DeserializeObject(string json, Type type) { return SimpleJson.DeserializeObject(json, type, null); } // Token: 0x06003095 RID: 12437 RVA: 0x00047074 File Offset: 0x00045274 public static T DeserializeObject(string json, IJsonSerializerStrategy jsonSerializerStrategy) { return (T)((object)SimpleJson.DeserializeObject(json, typeof(T), jsonSerializerStrategy)); } // Token: 0x06003096 RID: 12438 RVA: 0x000470A0 File Offset: 0x000452A0 public static T DeserializeObject(string json) { return (T)((object)SimpleJson.DeserializeObject(json, typeof(T), null)); } // Token: 0x06003097 RID: 12439 RVA: 0x000470CC File Offset: 0x000452CC public static string SerializeObject(object json, IJsonSerializerStrategy jsonSerializerStrategy) { StringBuilder stringBuilder = new StringBuilder(2000); bool flag = SimpleJson.SerializeValue(jsonSerializerStrategy, json, stringBuilder); return (!flag) ? null : stringBuilder.ToString(); } // Token: 0x06003098 RID: 12440 RVA: 0x00047108 File Offset: 0x00045308 public static string SerializeObject(object json) { return SimpleJson.SerializeObject(json, SimpleJson.CurrentJsonSerializerStrategy); } // Token: 0x06003099 RID: 12441 RVA: 0x00047128 File Offset: 0x00045328 public static string EscapeToJavascriptString(string jsonString) { string text; if (string.IsNullOrEmpty(jsonString)) { text = jsonString; } else { StringBuilder stringBuilder = new StringBuilder(); int i = 0; while (i < jsonString.Length) { char c = jsonString[i++]; if (c == '\\') { int num = jsonString.Length - i; if (num >= 2) { char c2 = jsonString[i]; if (c2 == '\\') { stringBuilder.Append('\\'); i++; } else if (c2 == '"') { stringBuilder.Append("\""); i++; } else if (c2 == 't') { stringBuilder.Append('\t'); i++; } else if (c2 == 'b') { stringBuilder.Append('\b'); i++; } else if (c2 == 'n') { stringBuilder.Append('\n'); i++; } else if (c2 == 'r') { stringBuilder.Append('\r'); i++; } } } else { stringBuilder.Append(c); } } text = stringBuilder.ToString(); } return text; } // Token: 0x0600309A RID: 12442 RVA: 0x00047260 File Offset: 0x00045460 private static IDictionary ParseObject(char[] json, ref int index, ref bool success) { IDictionary dictionary = new JsonObject(); SimpleJson.NextToken(json, ref index); bool flag = false; while (!flag) { int num = SimpleJson.LookAhead(json, index); if (num != 0) { if (num == 6) { SimpleJson.NextToken(json, ref index); } else { if (num == 2) { SimpleJson.NextToken(json, ref index); return dictionary; } string text = SimpleJson.ParseString(json, ref index, ref success); if (!success) { success = false; return null; } num = SimpleJson.NextToken(json, ref index); if (num != 5) { success = false; return null; } object obj = SimpleJson.ParseValue(json, ref index, ref success); if (!success) { success = false; return null; } dictionary[text] = obj; } continue; } success = false; return null; } return dictionary; } // Token: 0x0600309B RID: 12443 RVA: 0x00047338 File Offset: 0x00045538 private static JsonArray ParseArray(char[] json, ref int index, ref bool success) { JsonArray jsonArray = new JsonArray(); SimpleJson.NextToken(json, ref index); bool flag = false; while (!flag) { int num = SimpleJson.LookAhead(json, index); if (num != 0) { if (num == 6) { SimpleJson.NextToken(json, ref index); } else { if (num == 4) { SimpleJson.NextToken(json, ref index); break; } object obj = SimpleJson.ParseValue(json, ref index, ref success); if (!success) { return null; } jsonArray.Add(obj); } continue; } success = false; return null; } return jsonArray; } // Token: 0x0600309C RID: 12444 RVA: 0x000473D0 File Offset: 0x000455D0 private static object ParseValue(char[] json, ref int index, ref bool success) { switch (SimpleJson.LookAhead(json, index)) { case 1: return SimpleJson.ParseObject(json, ref index, ref success); case 3: return SimpleJson.ParseArray(json, ref index, ref success); case 7: return SimpleJson.ParseString(json, ref index, ref success); case 8: return SimpleJson.ParseNumber(json, ref index, ref success); case 9: SimpleJson.NextToken(json, ref index); return true; case 10: SimpleJson.NextToken(json, ref index); return false; case 11: SimpleJson.NextToken(json, ref index); return null; } success = false; return null; } // Token: 0x0600309D RID: 12445 RVA: 0x000474A4 File Offset: 0x000456A4 private static string ParseString(char[] json, ref int index, ref bool success) { StringBuilder stringBuilder = new StringBuilder(2000); SimpleJson.EatWhitespace(json, ref index); char c = json[index++]; bool flag = false; while (!flag) { if (index == json.Length) { break; } c = json[index++]; if (c == '"') { flag = true; break; } if (c == '\\') { if (index == json.Length) { break; } c = json[index++]; if (c == '"') { stringBuilder.Append('"'); } else if (c == '\\') { stringBuilder.Append('\\'); } else if (c == '/') { stringBuilder.Append('/'); } else if (c == 'b') { stringBuilder.Append('\b'); } else if (c == 'f') { stringBuilder.Append('\f'); } else if (c == 'n') { stringBuilder.Append('\n'); } else if (c == 'r') { stringBuilder.Append('\r'); } else if (c == 't') { stringBuilder.Append('\t'); } else if (c == 'u') { int num = json.Length - index; if (num >= 4) { uint num2; string text; if (!(success = uint.TryParse(new string(json, index, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out num2))) { text = ""; } else { if (55296U > num2 || num2 > 56319U) { stringBuilder.Append(SimpleJson.ConvertFromUtf32((int)num2)); index += 4; continue; } index += 4; num = json.Length - index; if (num >= 6) { uint num3; if (new string(json, index, 2) == "\\u" && uint.TryParse(new string(json, index + 2, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out num3)) { if (56320U <= num3 && num3 <= 57343U) { stringBuilder.Append((char)num2); stringBuilder.Append((char)num3); index += 6; continue; } } } success = false; text = ""; } return text; } break; } } else { stringBuilder.Append(c); } } if (!flag) { success = false; return null; } return stringBuilder.ToString(); } // Token: 0x0600309E RID: 12446 RVA: 0x0004772C File Offset: 0x0004592C private static string ConvertFromUtf32(int utf32) { if (utf32 < 0 || utf32 > 1114111) { throw new ArgumentOutOfRangeException("utf32", "The argument must be from 0 to 0x10FFFF."); } if (55296 <= utf32 && utf32 <= 57343) { throw new ArgumentOutOfRangeException("utf32", "The argument must not be in surrogate pair range."); } string text; if (utf32 < 65536) { text = new string((char)utf32, 1); } else { utf32 -= 65536; text = new string(new char[] { (char)((utf32 >> 10) + 55296), (char)(utf32 % 1024 + 56320) }); } return text; } // Token: 0x0600309F RID: 12447 RVA: 0x000477D8 File Offset: 0x000459D8 private static object ParseNumber(char[] json, ref int index, ref bool success) { SimpleJson.EatWhitespace(json, ref index); int lastIndexOfNumber = SimpleJson.GetLastIndexOfNumber(json, index); int num = lastIndexOfNumber - index + 1; string text = new string(json, index, num); object obj; if (text.IndexOf(".", StringComparison.OrdinalIgnoreCase) != -1 || text.IndexOf("e", StringComparison.OrdinalIgnoreCase) != -1) { double num2; success = double.TryParse(new string(json, index, num), NumberStyles.Any, CultureInfo.InvariantCulture, out num2); obj = num2; } else { long num3; success = long.TryParse(new string(json, index, num), NumberStyles.Any, CultureInfo.InvariantCulture, out num3); obj = num3; } index = lastIndexOfNumber + 1; return obj; } // Token: 0x060030A0 RID: 12448 RVA: 0x0004788C File Offset: 0x00045A8C private static int GetLastIndexOfNumber(char[] json, int index) { int i; for (i = index; i < json.Length; i++) { if ("0123456789+-.eE".IndexOf(json[i]) == -1) { break; } } return i - 1; } // Token: 0x060030A1 RID: 12449 RVA: 0x000478D0 File Offset: 0x00045AD0 private static void EatWhitespace(char[] json, ref int index) { while (index < json.Length) { if (" \t\n\r\b\f".IndexOf(json[index]) == -1) { break; } index++; } } // Token: 0x060030A2 RID: 12450 RVA: 0x00047904 File Offset: 0x00045B04 private static int LookAhead(char[] json, int index) { int num = index; return SimpleJson.NextToken(json, ref num); } // Token: 0x060030A3 RID: 12451 RVA: 0x00047924 File Offset: 0x00045B24 private static int NextToken(char[] json, ref int index) { SimpleJson.EatWhitespace(json, ref index); int num; if (index == json.Length) { num = 0; } else { char c = json[index]; index++; switch (c) { case ',': num = 6; break; case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': num = 8; break; default: switch (c) { case '[': num = 3; break; default: switch (c) { case '{': num = 1; break; default: if (c != '"') { index--; int num2 = json.Length - index; if (num2 >= 5) { if (json[index] == 'f' && json[index + 1] == 'a' && json[index + 2] == 'l' && json[index + 3] == 's' && json[index + 4] == 'e') { index += 5; num = 10; break; } } if (num2 >= 4) { if (json[index] == 't' && json[index + 1] == 'r' && json[index + 2] == 'u' && json[index + 3] == 'e') { index += 4; num = 9; break; } } if (num2 >= 4) { if (json[index] == 'n' && json[index + 1] == 'u' && json[index + 2] == 'l' && json[index + 3] == 'l') { index += 4; num = 11; break; } } num = 0; } else { num = 7; } break; case '}': num = 2; break; } break; case ']': num = 4; break; } break; case ':': num = 5; break; } } return num; } // Token: 0x060030A4 RID: 12452 RVA: 0x00047B0C File Offset: 0x00045D0C private static bool SerializeValue(IJsonSerializerStrategy jsonSerializerStrategy, object value, StringBuilder builder) { bool flag = true; string text = value as string; if (text != null) { flag = SimpleJson.SerializeString(text, builder); } else { IDictionary dictionary = value as IDictionary; if (dictionary != null) { flag = SimpleJson.SerializeObject(jsonSerializerStrategy, dictionary.Keys, dictionary.Values, builder); } else { IDictionary dictionary2 = value as IDictionary; if (dictionary2 != null) { flag = SimpleJson.SerializeObject(jsonSerializerStrategy, dictionary2.Keys, dictionary2.Values, builder); } else { IEnumerable enumerable = value as IEnumerable; if (enumerable != null) { flag = SimpleJson.SerializeArray(jsonSerializerStrategy, enumerable, builder); } else if (SimpleJson.IsNumeric(value)) { flag = SimpleJson.SerializeNumber(value, builder); } else if (value is bool) { builder.Append((!(bool)value) ? "false" : "true"); } else if (value == null) { builder.Append("null"); } else { object obj; flag = jsonSerializerStrategy.TrySerializeNonPrimitiveObject(value, out obj); if (flag) { SimpleJson.SerializeValue(jsonSerializerStrategy, obj, builder); } } } } } return flag; } // Token: 0x060030A5 RID: 12453 RVA: 0x00047C30 File Offset: 0x00045E30 private static bool SerializeObject(IJsonSerializerStrategy jsonSerializerStrategy, IEnumerable keys, IEnumerable values, StringBuilder builder) { builder.Append("{"); IEnumerator enumerator = keys.GetEnumerator(); IEnumerator enumerator2 = values.GetEnumerator(); bool flag = true; while (enumerator.MoveNext() && enumerator2.MoveNext()) { object obj = enumerator.Current; object obj2 = enumerator2.Current; if (!flag) { builder.Append(","); } string text = obj as string; if (text != null) { SimpleJson.SerializeString(text, builder); } else if (!SimpleJson.SerializeValue(jsonSerializerStrategy, obj2, builder)) { return false; } builder.Append(":"); if (SimpleJson.SerializeValue(jsonSerializerStrategy, obj2, builder)) { flag = false; continue; } return false; } builder.Append("}"); return true; } // Token: 0x060030A6 RID: 12454 RVA: 0x00047D08 File Offset: 0x00045F08 private static bool SerializeArray(IJsonSerializerStrategy jsonSerializerStrategy, IEnumerable anArray, StringBuilder builder) { builder.Append("["); bool flag = true; IEnumerator enumerator = anArray.GetEnumerator(); try { while (enumerator.MoveNext()) { object obj = enumerator.Current; if (!flag) { builder.Append(","); } if (!SimpleJson.SerializeValue(jsonSerializerStrategy, obj, builder)) { return false; } flag = false; } } finally { IDisposable disposable; if ((disposable = enumerator as IDisposable) != null) { disposable.Dispose(); } } builder.Append("]"); return true; } // Token: 0x060030A7 RID: 12455 RVA: 0x00047DAC File Offset: 0x00045FAC private static bool SerializeString(string aString, StringBuilder builder) { builder.Append("\""); foreach (char c in aString.ToCharArray()) { if (c == '"') { builder.Append("\\\""); } else if (c == '\\') { builder.Append("\\\\"); } else if (c == '\b') { builder.Append("\\b"); } else if (c == '\f') { builder.Append("\\f"); } else if (c == '\n') { builder.Append("\\n"); } else if (c == '\r') { builder.Append("\\r"); } else if (c == '\t') { builder.Append("\\t"); } else { builder.Append(c); } } builder.Append("\""); return true; } // Token: 0x060030A8 RID: 12456 RVA: 0x00047EB4 File Offset: 0x000460B4 private static bool SerializeNumber(object number, StringBuilder builder) { if (number is long) { builder.Append(((long)number).ToString(CultureInfo.InvariantCulture)); } else if (number is ulong) { builder.Append(((ulong)number).ToString(CultureInfo.InvariantCulture)); } else if (number is int) { builder.Append(((int)number).ToString(CultureInfo.InvariantCulture)); } else if (number is uint) { builder.Append(((uint)number).ToString(CultureInfo.InvariantCulture)); } else if (number is decimal) { builder.Append(((decimal)number).ToString(CultureInfo.InvariantCulture)); } else if (number is float) { builder.Append(((float)number).ToString(CultureInfo.InvariantCulture)); } else { builder.Append(Convert.ToDouble(number, CultureInfo.InvariantCulture).ToString("r", CultureInfo.InvariantCulture)); } return true; } // Token: 0x060030A9 RID: 12457 RVA: 0x00047FF0 File Offset: 0x000461F0 private static bool IsNumeric(object value) { return value is sbyte || value is byte || value is short || value is ushort || value is int || value is uint || value is long || value is ulong || value is float || value is double || value is decimal; } // Token: 0x17000B05 RID: 2821 // (get) Token: 0x060030AA RID: 12458 RVA: 0x000480CC File Offset: 0x000462CC // (set) Token: 0x060030AB RID: 12459 RVA: 0x000480F8 File Offset: 0x000462F8 public static IJsonSerializerStrategy CurrentJsonSerializerStrategy { get { IJsonSerializerStrategy jsonSerializerStrategy; if ((jsonSerializerStrategy = SimpleJson._currentJsonSerializerStrategy) == null) { jsonSerializerStrategy = (SimpleJson._currentJsonSerializerStrategy = SimpleJson.PocoJsonSerializerStrategy); } return jsonSerializerStrategy; } set { SimpleJson._currentJsonSerializerStrategy = value; } } // Token: 0x17000B06 RID: 2822 // (get) Token: 0x060030AC RID: 12460 RVA: 0x00048104 File Offset: 0x00046304 [EditorBrowsable(EditorBrowsableState.Advanced)] public static PocoJsonSerializerStrategy PocoJsonSerializerStrategy { get { PocoJsonSerializerStrategy pocoJsonSerializerStrategy; if ((pocoJsonSerializerStrategy = SimpleJson._pocoJsonSerializerStrategy) == null) { pocoJsonSerializerStrategy = (SimpleJson._pocoJsonSerializerStrategy = new PocoJsonSerializerStrategy()); } return pocoJsonSerializerStrategy; } } // Token: 0x04000991 RID: 2449 private const int TOKEN_NONE = 0; // Token: 0x04000992 RID: 2450 private const int TOKEN_CURLY_OPEN = 1; // Token: 0x04000993 RID: 2451 private const int TOKEN_CURLY_CLOSE = 2; // Token: 0x04000994 RID: 2452 private const int TOKEN_SQUARED_OPEN = 3; // Token: 0x04000995 RID: 2453 private const int TOKEN_SQUARED_CLOSE = 4; // Token: 0x04000996 RID: 2454 private const int TOKEN_COLON = 5; // Token: 0x04000997 RID: 2455 private const int TOKEN_COMMA = 6; // Token: 0x04000998 RID: 2456 private const int TOKEN_STRING = 7; // Token: 0x04000999 RID: 2457 private const int TOKEN_NUMBER = 8; // Token: 0x0400099A RID: 2458 private const int TOKEN_TRUE = 9; // Token: 0x0400099B RID: 2459 private const int TOKEN_FALSE = 10; // Token: 0x0400099C RID: 2460 private const int TOKEN_NULL = 11; // Token: 0x0400099D RID: 2461 private const int BUILDER_CAPACITY = 2000; // Token: 0x0400099E RID: 2462 private static IJsonSerializerStrategy _currentJsonSerializerStrategy; // Token: 0x0400099F RID: 2463 private static PocoJsonSerializerStrategy _pocoJsonSerializerStrategy; } }