json_serializer.DeserializeObject, непосредственное окно, VS2017
Я новичок в aC# (но довольно хорошо разбираюсь в JavaScript) и учусь на отладке примера кода. У меня сейчас вопрос по поводу "непосредственного окна".
Я установил точку останова на
(... nested object sent via JSON from some external javascript code ...)
var json_serializer = new JavaScriptSerializer();
var value_list = (IDictionary<string, object>)json_serializer.DeserializeObject(value);
Затем оценил следующее в ближайшем окне
value_list
Count = 4
[0]: {[type, msg]}
[1]: {[settings, System.Collections.Generic.Dictionary`2[System.String,System.Object]]}
[2]: {[hello, edge]}
[3]: {[txt, notepad.exe]}
value_list["txt"]
"notepad.exe"
value_list["settings"]
Count = 2
[0]: {[host, test.com]}
[1]: {[port, 80]}
Все идет нормально.
Потом я попробовал
value_list["settings"]["host"]
Но только получил "ошибка CS0021: не удается применить индексирование с помощью [] к выражению типа" объект "".
Как я могу напечатать значение хоста в ближайшем окне?
1 ответ
C# - строго типизированный язык.
У тебя есть
var value_list = (IDictionary<string, object>)json_serializer.DeserializeObject(value);
var
означает, что тип переменной определяется компилятором уже во время компиляции. Из-за приведения справа, компилятор определяет это:
IDictionary<string, object> value_list = (IDictionary<string, object>)json_serializer.DeserializeObject(value);
Так, value_list
имеет тип IDictionary<string, object>
, Так, value_list["settings"]
имеет тип object
,
Чтобы увидеть значение в непосредственном окне приведите промежуточный результат (который имеет тип object
) к соответствующему типу.
((IDictionary<string, object>)value_list["settings"])["host"]