json_serializer.DeserializeObject, непосредственное окно, VS2017 - PullRequest
0 голосов
/ 01 марта 2019

Я новичок в 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 Ответ

0 голосов
/ 01 марта 2019

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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...