Очень хочу попробовать создать приложение, которое бы подобно MySQL WorckBench строило план выполнения запроса графически. На вход подаётся, как раз таки этот план в формате JSON.
Проблема такова, этот код всегда динамический, он скалируется от вида запроса селект, например:
{
"query_block": {
"select_id": 1,
"table": {
"table_name": "totalprice",
"access_type": "ALL",
"rows": 1,
"filtered": 100
}
}
}
или
{
"query_block": {
"select_id": 1,
"grouping_operation": {
"using_temporary_table": true,
"using_filesort": true,
"nested_loop": [
{
"table": {
"table_name": "film",
"access_type": "range",
"possible_keys": [
"PRIMARY",
"idx_title"
],
"key": "idx_title",
"used_key_parts": [
"title"
],
"key_length": "767",
"rows": 43,
"filtered": 100,
"using_index": true,
"attached_condition": "(`sakila`.`film`.`title` like 'W%')"
}
},
{
"table": {
"table_name": "inventory",
"access_type": "ref",
"possible_keys": [
"PRIMARY",
"idx_fk_film_id"
],
"key": "idx_fk_film_id",
"used_key_parts": [
"film_id"
],
"key_length": "2",
"ref": [
"sakila.film.film_id"
],
"rows": 2,
"filtered": 100,
"using_index": true
}
...
Т.е, как я понял десериализовать такой JSON посредством DataContractJsonSerializer не получится, потому как я заранее не знаю структуру класса. Можно попробовать это сделать динамически, с помощью JsonConvert.DeserializeObject, например, и получить что-то типа dynamic или Dictonary, но всё это кажется слишком запутанно.
Вопрос: Нет ли способа попроще преобразовать динамический JSON вот что-то похожее на uml-диаграмму внутри кода, т.е посредством каких-нибудь библиотек?