Рассмотрим этот Json объект:
{
"main": {
"2058": {
"id": "2058",
"name": "foo",
"attrib1": "17",
"domain": "somewhere.net",
"enabled": "1",
"permissions": [
"admin",
"user",
"guest",
"vpn",
"power"
]
}
},
"validate": {
"2058": {
"id": "2058",
"name": "foo",
"attrib1": "17",
"domain": "somewhere.net",
"enabled": "1",
"permissions": [
"admin",
"user",
"guest",
"vpn",
"power"
]
}
},
"result": "ok"
}
Между «включенными» и «разрешениями» есть еще несколько сотен пар, которые я пропустил. Часть «проверка» - это точная копия «основного», а «результат» - это, ну да, результат.
Я хочу получить 2 c значений из основного раздела. «идентификатор» и «домен». Для этого я использую следующий код.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
namespace JsonParse
{
class Program
{
static void Main()
{
string json = "{" +
"\"main\":{" +
"\"2058\":{" +
"\"id\":\"2058\"," +
"\"name\":\"foo\"," +
"\"attrib1\":\"17\"," +
"\"domain\":\"somewhere.net\"," +
"\"enabled\":\"1\"," +
"\"permissions\":[\"admin\",\"user\",\"guest\",\"vpn\",\"power\"]" +
"}" +
"}," +
"\"validate\":{" +
"\"2058\":{" +
"\"id\":\"2058\"," +
"\"name\":\"foo\"," +
"\"attrib1\":\"17\"," +
"\"domain\":\"somewhere.net\"," +
"\"enabled\":\"1\"," +
"\"permissions\":[\"admin\",\"user\",\"guest\",\"vpn\",\"power\"]" +
"}" +
"}," +
"\"result\":\"ok\"" +
"}";
foreach (KeyValuePair<string, object> item in JsonSerializer.Deserialize<Dictionary<string, object>>(json))
{
if (item.Key == "main")
{
Dictionary<string, object> pairs = JsonSerializer.Deserialize<Dictionary<string, object>>(item.Value.ToString());
Dictionary<string, object> pairs1 = JsonSerializer.Deserialize<Dictionary<string, object>>(pairs.First().Value.ToString());
foreach (KeyValuePair<string, object> valuePair in pairs1)
{
if (valuePair.Key == "id" || valuePair.Key == "domain")
{
Console.WriteLine("Key: " + valuePair.Key + "\nValue: " + valuePair.Value);
}
}
}
}
}
}
}
Отсюда я получаю «2058» и «где-то. net», но есть ли более элегантный способ получить значения вместо трехкратной десериализации ?