public async Task <string> GetFormattedJson(GenericJson jenericJson, string deep = "")
        {
            string result = "";

            if (jenericJson.value == null)
            {
                return(result);
            }
            if (jenericJson.key != "")
            {
                result += deep + "key: \"" + jenericJson.key + "\" ";
            }
            if (jenericJson.value.GetType() == typeof(List <GenericJson>))
            {
                if (jenericJson.key == "")
                {
                    result += deep + "[\n";
                }
                else
                {
                    result += "\n" + deep + "{\n";
                }
                foreach (var item in (jenericJson.value as List <GenericJson>))
                {
                    result += await GetFormattedJson(item, deep + "    ");
                }
                if (jenericJson.key == "")
                {
                    result += deep + "]\n";
                }
                else
                {
                    result += deep + "}\n";
                }
            }
            else if (jenericJson.value != null)
            {
                result += ", value = " + jenericJson.value.ToString() + "\n";
            }
            return(result);
        }
        public async Task <string> ReadJson(JsonTextReader reader, GenericJson jenericJson, string deep = "")
        {
            //result += ">>>>>>>>>>>>>>>>>>>>>>>>>\n";
            string str    = "";
            string result = "";

            if (reader.TokenType.ToString() == "None")
            {
                if (!reader.Read())
                {
                    return(result);
                }
            }
            switch (reader.TokenType.ToString())
            {
            case "StartObject":
                if (jenericJson.value == null)
                {
                    jenericJson.value = new List <GenericJson>();
                }
                result += deep + "StartObject\n";
                if (!reader.Read())
                {
                    return(result);
                }
                while (str != "EndObject")
                {
                    str = reader.TokenType.ToString();
                    //result += "!!! " + str + "\n";
                    (jenericJson.value as List <GenericJson>).Add(new GenericJson());
                    result += await ReadJson(reader, (jenericJson.value as List <GenericJson>)[(jenericJson.value as List <GenericJson>).Count - 1], deep + " ");

                    //if (!reader.Read()) return;
                }
                //await ReadJson(reader, jenericJson);
                break;

            case "StartArray":
                if (jenericJson.value == null)
                {
                    jenericJson.value = new List <GenericJson>();
                }
                result += deep + "StartArray\n";
                if (!reader.Read())
                {
                    return(result);
                }
                while (str != "EndArray")
                {
                    str = reader.TokenType.ToString();
                    //result += ">>> " + str + "\n";
                    (jenericJson.value as List <GenericJson>).Add(new GenericJson());
                    await ReadJson(reader, (jenericJson.value as List <GenericJson>)[(jenericJson.value as List <GenericJson>).Count - 1], deep + " ");

                    //if (!reader.Read()) return;
                }
                break;

            case "PropertyName":
                if (jenericJson.value == null)
                {
                    //jenericJson.value = new List<GenericJson>();
                }
                str     = reader.Value.ToString();
                result += deep + "PropertyName: " + str + "\n";
                //(jenericJson.value as List<GenericJson>).Add(new GenericJson());
                //(jenericJson.value as List<GenericJson>)[(jenericJson.value as List<GenericJson>).Count - 1].key = str;
                jenericJson.key = str;
                if (!reader.Read())
                {
                    return(result);
                }
                //await ReadJson(reader, (jenericJson.value as List<GenericJson>)[(jenericJson.value as List<GenericJson>).Count - 1], deep + " ");
                await ReadJson(reader, jenericJson, deep);

                break;

            case "String":
                str               = reader.Value.ToString();
                result           += deep + "String: " + str + "\n";
                jenericJson.value = str;
                if (!reader.Read())
                {
                    return(result);
                }
                //await ReadJson(reader, jenericJson);
                break;

            case "Integer":
                str               = reader.Value.ToString();
                result           += deep + "Integer: " + str + "\n";
                jenericJson.value = str;
                if (!reader.Read())
                {
                    return(result);
                }
                //await ReadJson(reader, jenericJson);
                break;

            default:
                //result += "<<< Skip " + reader.TokenType + "\n";
                if (!reader.Read())
                {
                    return(result);
                }
                //await ReadJson(reader, jenericJson);
                break;
            }
            //result += "<<<<<<<<<<<<<<<<<<<<<<<<<\n";
            return(result);
        }