Как я могу получить значение определенного вложенного свойства из объекта JSON во время выполнения? Вот пример того, что ilustrates, что я пытаюсь сделать (без проверки ошибок, потому что это просто быстрый пример):Newtonsoft JSON получает определенное вложенное свойство во время выполнения
JSON объекта:
string jsonobj = "{
"Header":"someHeader",
"FirstNest":{
"Property1":"123",
"property2":"321",
"SecondNest":{
"property3":"456",
"property4":"789"
}
}
В моем коде, я бы что-то вроде этого :
string read = Console.ReadLine();
, где пользователь будет вводить, например FirstNest.Property1
, а потом я вернусь 123
. Я мог бы сделать что-то вроде этого:
JObject msg = JObject.Parse(jsonobj);
string[] tosearch = read.Split('.'); // This would give me FirstNest Property1
string tofind = (string)msg[tosearch[0]][tosearch[1]];
Проблема возникает, когда пользователь хочет получить доступ к FirstNest.SecondNest.property3
, потому что мой жесткий кодировкой метод может принимать только две строки. Как я могу создать такой метод запроса во время выполнения, с помощью которого я мог бы позволить пользователю искать любое свойство? Один soultion было бы сделать функцию
GetProperty(JObject msg, string str1, string str2)
{
return (string)msg[str1][str2];
}
потом еще один, который будет принимать 3 строки в качестве входных данных:
GetProperty(JObject msg, string str1, string str2, string str3)
{
return (string)msg[str1][str2][str3];
}
, потом еще один, который будет принимать 4 строки в качестве входных данных, и так на ... который не кажется эффективным решением.
Я думаю, что ['SelectToken'] (http://www.newtonsoft.com/json/help/html/SelectToken.htm) уже делает то, что вы хотите, не так ли? – dbc
@dbc. Вы правы, это лучшее решение проблемы (хотя и работает решение Джейсона Бойда). Благодаря! –