C# json_serializer.DeserializeObject,即时窗口,VS2017

C# json_serializer.DeserializeObject,即时窗口,VS2017,c#,javascriptserializer,immediate-window,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

我是一名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["settings"]["host"]
但只得到“错误CS0021:无法将[]索引应用于'object'类型的表达式”

如何在即时窗口中打印host的值?

C#是一种强类型语言

你有

var value_list = (IDictionary<string, object>)json_serializer.DeserializeObject(value);
因此,
value\u list
属于
IDictionary
类型。因此,
value\u list[“settings”]
的类型为
object

要查看即时窗口中的值,请将中间结果(类型为
对象
)强制转换为适当的类型

((IDictionary<string, object>)value_list["settings"])["host"]
((IDictionary)值列表[“设置”])[“主机”]

如果您只是在学习,那么请放弃并忘记类
JavaScriptSerializer
曾经存在过。使用NewtonSoft.Json包,它已经是很长一段时间的标准是的,JsonConvert要好得多JavaScriptSerializer是在AJAX第一次出现时引入的一个过时类。自ASP.NETWebAPI以来,每个堆栈都使用JSON.NET,即NewtonSoft.JSON。只是不要使用JavascriptSerializerNoted(我已经在Microsoft的API文档中看到了相同的建议)。#1可以工作。谢谢大家!#2不工作错误CS0656:尽管已添加引用,但缺少编译器所需的成员“Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create”。但这应该是另外一个问题。我只是想指出#1似乎是“更容易”的解决方案。@cscharf是的,我已经从答案中删除了第二个建议。在即时窗口中使用
dynamic
仅适用于实际项目源代码中已经使用了
dynamic
的项目(除了非常特定的情况外,不应该这样做)。明白了吗。谢谢
IDictionary<string, object> value_list = (IDictionary<string, object>)json_serializer.DeserializeObject(value);
((IDictionary<string, object>)value_list["settings"])["host"]