Beispiel #1
0
        private static IDictionary <object, object> ParseObject(char[] json, ref int index, ref bool success)
        {
            //  IDictionary<string, object> dictionary = new JsonObject();
            IDictionary <object, object> dictionary = new Dictionary <object, object>();

            SimpleJsonTool.NextToken(json, ref index);
            bool flag = false;
            IDictionary <object, object> result;

            while (!flag)
            {
                int num = SimpleJsonTool.LookAhead(json, index);
                if (num != 0)
                {
                    if (num == 6)
                    {
                        SimpleJsonTool.NextToken(json, ref index);
                    }
                    else
                    {
                        if (num == 2)
                        {
                            SimpleJsonTool.NextToken(json, ref index);
                            result = dictionary;
                            return(result);
                        }
                        //string key = SimpleJsonTool.ParseString(json, ref index, ref success);
                        object key = SimpleJsonTool.ParseValue(json, ref index, ref success);
                        if (!success)
                        {
                            success = false;
                            result  = null;
                            return(result);
                        }
                        num = SimpleJsonTool.NextToken(json, ref index);
                        if (num != 5)
                        {
                            success = false;
                            result  = null;
                            return(result);
                        }
                        object value = SimpleJsonTool.ParseValue(json, ref index, ref success);
                        if (!success)
                        {
                            success = false;
                            result  = null;
                            return(result);
                        }
                        dictionary[key] = value;
                    }
                    continue;
                }
                success = false;
                result  = null;
                return(result);
            }
            result = dictionary;
            return(result);
        }
Beispiel #2
0
        public static string SerializeObject(object json, IJsonSerializerStrategy jsonSerializerStrategy)
        {
            StringBuilder stringBuilder = GetStringBuilder();
            bool          flag          = SimpleJsonTool.SerializeValue(jsonSerializerStrategy, json, stringBuilder);

            string res = (!flag) ? null : stringBuilder.ToString();

            RecycleStringBuilder(stringBuilder);
            return(res);
        }
Beispiel #3
0
        public static object DeserializeObject(string json)
        {
            object result;

            if (SimpleJsonTool.TryDeserializeObject(json, out result))
            {
                return(result);
            }
            throw new SerializationException("Invalid JSON string");
        }
Beispiel #4
0
        private static bool SerializeValue(IJsonSerializerStrategy jsonSerializerStrategy, object value, StringBuilder builder)
        {
            bool   flag = true;
            string text = value as string;

            if (text != null)
            {
                flag = SimpleJsonTool.SerializeString(text, builder);
            }
            else
            {
                IDictionary <object, object> dictionary = value as IDictionary <object, object>;
                if (dictionary != null)
                {
                    flag = SimpleJsonTool.SerializeObject(jsonSerializerStrategy, dictionary.Keys, dictionary.Values, builder);
                }
                else
                {
                    //UnityEngine.Debug.Log("===>>IEnumerable");
                    IEnumerable enumerable = value as IEnumerable;
                    if (enumerable != null)
                    {
                        flag = SimpleJsonTool.SerializeArray(jsonSerializerStrategy, enumerable, builder);
                    }
                    else if (SimpleJsonTool.IsNumeric(value))
                    {
                        flag = SimpleJsonTool.SerializeNumber(value, builder);
                    }
                    else if (value is bool)
                    {
                        builder.Append((!(bool)value) ? "false" : "true");
                    }
                    else if (value == null)
                    {
                        builder.Append("null");
                    }
                    else
                    {
                        object value2;
                        flag = jsonSerializerStrategy.TrySerializeNonPrimitiveObject(value, out value2);
                        if (flag)
                        {
                            SimpleJsonTool.SerializeValue(jsonSerializerStrategy, value2, builder);
                        }
                    }
                }
            }
            return(flag);
        }
Beispiel #5
0
        public static bool TryDeserializeObject(string json, out object obj)
        {
            bool result = true;

            if (json != null)
            {
                char[] json2 = json.ToCharArray();
                int    num   = 0;
                obj = SimpleJsonTool.ParseValue(json2, ref num, ref result);
            }
            else
            {
                obj = null;
            }
            return(result);
        }
Beispiel #6
0
        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;
            bool        result;

            while (enumerator.MoveNext() && enumerator2.MoveNext())
            {
                object current  = enumerator.Current;
                object current2 = enumerator2.Current;
                if (!flag)
                {
                    builder.Append(",");
                }
                //string text = current as string;
                //if (text != null)
                //{
                //    SimpleJsonTool.SerializeString(text, builder);
                //}
                if (SimpleJsonTool.SerializeValue(jsonSerializerStrategy, current, builder))
                {
                }
                else if (!SimpleJsonTool.SerializeValue(jsonSerializerStrategy, current2, builder))
                {
                    result = false;
                    return(result);
                }
                builder.Append(":");
                if (SimpleJsonTool.SerializeValue(jsonSerializerStrategy, current2, builder))
                {
                    flag = false;
                    continue;
                }
                result = false;
                return(result);
            }
            builder.Append("}");
            result = true;
            return(result);
        }
Beispiel #7
0
        private static JsonArray ParseArray(char[] json, ref int index, ref bool success)
        {
            JsonArray jsonArray = new JsonArray();

            SimpleJsonTool.NextToken(json, ref index);
            bool      flag = false;
            JsonArray result;

            while (!flag)
            {
                int num = SimpleJsonTool.LookAhead(json, index);
                if (num != 0)
                {
                    if (num == 6)
                    {
                        SimpleJsonTool.NextToken(json, ref index);
                    }
                    else
                    {
                        if (num == 4)
                        {
                            SimpleJsonTool.NextToken(json, ref index);
                            break;
                        }
                        object item = SimpleJsonTool.ParseValue(json, ref index, ref success);
                        if (!success)
                        {
                            result = null;
                            return(result);
                        }
                        jsonArray.Add(item);
                    }
                    continue;
                }
                success = false;
                result  = null;
                return(result);
            }
            result = jsonArray;
            return(result);
        }
Beispiel #8
0
        private static object ParseValue(char[] json, ref int index, ref bool success)
        {
            object result;

            switch (SimpleJsonTool.LookAhead(json, index))
            {
            case 1:
                result = SimpleJsonTool.ParseObject(json, ref index, ref success);
                return(result);

            case 3:
                result = SimpleJsonTool.ParseArray(json, ref index, ref success);
                return(result);

            case 7:
                result = SimpleJsonTool.ParseString(json, ref index, ref success);
                return(result);

            case 8:
                result = SimpleJsonTool.ParseNumber(json, ref index, ref success);
                return(result);

            case 9:
                SimpleJsonTool.NextToken(json, ref index);
                result = true;
                return(result);

            case 10:
                SimpleJsonTool.NextToken(json, ref index);
                result = false;
                return(result);

            case 11:
                SimpleJsonTool.NextToken(json, ref index);
                result = null;
                return(result);
            }
            success = false;
            result  = null;
            return(result);
        }
Beispiel #9
0
        private static object ParseNumber(char[] json, ref int index, ref bool success)
        {
            SimpleJsonTool.EatWhitespace(json, ref index);
            int    lastIndexOfNumber = SimpleJsonTool.GetLastIndexOfNumber(json, index);
            int    length            = lastIndexOfNumber - index + 1;
            string text = new string(json, index, length);
            object result;

            if (text.IndexOf(".", StringComparison.OrdinalIgnoreCase) != -1 || text.IndexOf("e", StringComparison.OrdinalIgnoreCase) != -1)
            {
                double num;
                success = double.TryParse(new string(json, index, length), NumberStyles.Any, CultureInfo.InvariantCulture, out num);
                result  = num;
            }
            else
            {
                long num2;
                success = long.TryParse(new string(json, index, length), NumberStyles.Any, CultureInfo.InvariantCulture, out num2);
                result  = num2;
            }
            index = lastIndexOfNumber + 1;
            return(result);
        }
Beispiel #10
0
        private static bool SerializeArray(IJsonSerializerStrategy jsonSerializerStrategy, IEnumerable anArray, StringBuilder builder)
        {
            builder.Append("[");
            bool        flag       = true;
            IEnumerator enumerator = anArray.GetEnumerator();
            bool        result;

            try
            {
                while (enumerator.MoveNext())
                {
                    object current = enumerator.Current;
                    if (!flag)
                    {
                        builder.Append(",");
                    }
                    if (!SimpleJsonTool.SerializeValue(jsonSerializerStrategy, current, builder))
                    {
                        result = false;
                        return(result);
                    }
                    flag = false;
                }
            }
            finally
            {
                IDisposable disposable;
                if ((disposable = (enumerator as IDisposable)) != null)
                {
                    disposable.Dispose();
                }
            }
            builder.Append("]");
            result = true;
            return(result);
        }
Beispiel #11
0
 public static T DeserializeObject <T>(string json, IJsonSerializerStrategy jsonSerializerStrategy)
 {
     return((T)((object)SimpleJsonTool.DeserializeObject(json, typeof(T), jsonSerializerStrategy)));
 }
Beispiel #12
0
        private static string ParseString(char[] json, ref int index, ref bool success)
        {
            StringBuilder stringBuilder = GetStringBuilder(); //new StringBuilder(2000);

            SimpleJsonTool.EatWhitespace(json, ref index);
            char   c    = json[index++];
            bool   flag = false;
            string result;

            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;
                            if (!(success = uint.TryParse(new string(json, index, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out num2)))
                            {
                                result = "";
                            }
                            else
                            {
                                if (55296u > num2 || num2 > 56319u)
                                {
                                    stringBuilder.Append(SimpleJsonTool.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;
                                result  = "";
                            }
                            return(result);
                        }
                        break;
                    }
                }
                else
                {
                    stringBuilder.Append(c);
                }
            }
            if (!flag)
            {
                success = false;
                result  = null;
                return(result);
            }
            result = stringBuilder.ToString();

            RecycleStringBuilder(stringBuilder);

            return(result);
        }
Beispiel #13
0
 public static T DeserializeObject <T>(string json)
 {
     return((T)((object)SimpleJsonTool.DeserializeObject(json, typeof(T), null)));
 }
Beispiel #14
0
 public static string SerializeObject(object json)
 {
     return(SimpleJsonTool.SerializeObject(json, SimpleJsonTool.CurrentJsonSerializerStrategy));
 }
Beispiel #15
0
        private static int NextToken(char[] json, ref int index)
        {
            SimpleJsonTool.EatWhitespace(json, ref index);
            int result;

            if (index != json.Length)
            {
                char c = json[index];
                index++;
                switch (c)
                {
                case ',':
                    result = 6;
                    return(result);

                case '-':
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                    result = 8;
                    return(result);

                case '.':
                case '/':
IL_69:
                    switch (c)
                    {
                    case '[':
                        result = 3;
                        return(result);

                    case '\\':
IL_7E:
                        switch (c)
                        {
                        case '{':
                            result = 1;
                            return(result);

                        case '|':
IL_93:
                            if (c != '"')
                            {
                                index--;
                                int num = json.Length - index;
                                if (num >= 5)
                                {
                                    if (json[index] == 'f' && json[index + 1] == 'a' && json[index + 2] == 'l' && json[index + 3] == 's' && json[index + 4] == 'e')
                                    {
                                        index += 5;
                                        result = 10;
                                        return(result);
                                    }
                                }
                                if (num >= 4)
                                {
                                    if (json[index] == 't' && json[index + 1] == 'r' && json[index + 2] == 'u' && json[index + 3] == 'e')
                                    {
                                        index += 4;
                                        result = 9;
                                        return(result);
                                    }
                                }
                                if (num >= 4)
                                {
                                    if (json[index] == 'n' && json[index + 1] == 'u' && json[index + 2] == 'l' && json[index + 3] == 'l')
                                    {
                                        index += 4;
                                        result = 11;
                                        return(result);
                                    }
                                }
                                result = 0;
                                return(result);
                            }
                            result = 7;

                            return(result);

                        case '}':
                            result = 2;
                            return(result);

                        default:
                            goto IL_93;
                        }


                    case ']':
                        result = 4;
                        return(result);

                    default:
                        goto IL_7E;
                    }

                case ':':
                    result = 5;
                    return(result);

                default:
                    goto IL_69;
                }
            }
            result = 0;
            return(result);
        }
Beispiel #16
0
        private static int LookAhead(char[] json, int index)
        {
            int num = index;

            return(SimpleJsonTool.NextToken(json, ref num));
        }
Beispiel #17
0
 public static object DeserializeObject(string json, Type type)
 {
     return(SimpleJsonTool.DeserializeObject(json, type, null));
 }
Beispiel #18
0
 public override string ToString()
 {
     return(SimpleJsonTool.SerializeObject(this) ?? string.Empty);
 }
Beispiel #19
0
        public static object DeserializeObject(string json, Type type, IJsonSerializerStrategy jsonSerializerStrategy)
        {
            object obj = SimpleJsonTool.DeserializeObject(json);

            return((type != null && (obj == null || !ReflectionsUtils.IsAssignableFrom(obj.GetType(), type))) ? (jsonSerializerStrategy ?? SimpleJsonTool.CurrentJsonSerializerStrategy).DeserializeObject(obj, type) : obj);
        }