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"]
Другие вопросы по тегам