//System.Text.Json 사용
    public static dynamic DeserializeJson(string s) {
            return Parse(JsonDocument.Parse(s).RootElement);

            static dynamic Parse(JsonElement e)
                => e.ValueKind switch {
                    JsonValueKind.Array => e.EnumerateArray().Select(Parse).ToArray(),
                    JsonValueKind. => Parse(e),
                    JsonValueKind.String => e.GetString(),
                    JsonValueKind.Number => e.GetDecimal(),
                    JsonValueKind.True => true,
                    JsonValueKind.False => false,
                    _ => null};

            static dynamic Parse(JsonElement e) {
                IDictionary<string, > obj = new Expando();
                foreach(var i in e.Enumerate())
                    obj.Add(i.Name, Parse(i.Value));
                return obj;
            }
        }


//System.Json 사용
        public static dynamic DeserializeJson2(string s) {
            return Parse(JsonValue.Parse(s));

            static dynamic Parse(JsonValue e)
                => e.JsonType switch {
                    JsonType.Array => ((JsonArray)e).Select(Parse).ToArray(),
                    JsonType. => Parse((Json)e),
                    JsonType.String => (string)e,
                    JsonType.Number => (decimal)e,
                    JsonType.Boolean => (bool)e,
                    _ => null};

            static dynamic Parse(Json e) {
                IDictionary<string, > obj = new Expando();
                foreach(var i in e)
                    obj.Add(i.Key, Parse(i.Value));
                return obj;
            }
        }



사용법

            var json = DeserializeJson2("{"arr":[1, 2, 3, 4, 5], "t":true, "f":false, "s":"strings...", "i":1234567}");
            foreach(var i in json.arr) Console.WriteLine(i);
            Console.WriteLine(json.t);
            Console.WriteLine(json.f);
            Console.WriteLine(json.s);
            Console.WriteLine(json.i);


디시 API 파싱하면서 맹글어봄.
근데 그냥 다른 라이브러리 쓰는게 더 편함