json_serializer.DeserializeObject,立即窗口,VS2017

时间:2019-03-01 15:21:46

标签: c# javascriptserializer immediate-window

我是c#初学者(但对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:无法将[]的索引应用于类型为'object'的表达式”。

如何在立即窗口中显示主机的值?

1 个答案:

答案 0 :(得分: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"]