json_serializer.DeserializeObject、即时window、VS2017

json_serializer.DeserializeObject, immediate window, VS2017

我是一名c#初学者(但对JavaScript相当熟悉),我正在通过调试示例代码来学习。我现在有一个关于 "immediate window".

的问题

我设置断点在

  (... 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);

然后立即评价以下window

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"]

但是只得到了"error CS0021: Cannot apply indexing with [] to an expression of type 'object'".

如何立即打印主机的值window?

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_listIDictionary<string, object> 类型。所以,value_list["settings"]object 类型。

要查看立即数中的值​​ window 将中间结果(属于 object 类型)转换为适当的类型。

((IDictionary<string, object>)value_list["settings"])["host"]