为什么Json.Decode不能在C#中处理数组?

时间:2015-07-24 21:01:55

标签: c# json visual-studio

有人可以帮助了解这里发生的事情吗?

如果我在C#程序中这样做:

dynamic data = Json.Decode("{\"myObjects\": [ { \"id\": 1 }, { \"id\": 2 } ] }");
int id = data.myObjects[0].id;

我能够访问id并将其设置为1 ......到目前为止,一切都很好。

我不明白为什么,当我调试程序时,我无法在Locals检查器中查看data的内容。相反,它告诉我这一点,好像它不知道如何处理数组。

  

错误无法发现有关此对象的更多信息

3 个答案:

答案 0 :(得分:2)

似乎存在Visual Studio的错误/限制(至少我使用的是2013版本)。如果您将手表放在data上,则可以点击Dynamic View并查看其有stuff,但如果您点击myObject(即DynamicJsonArray })你只获得它的“动态”部分,而不是它的“固定”属性(如Length),如果你试图点击它的Dynamic View你会收到没有关于此的更多信息可以发现对象 ... 如果您为data.myObject创建了一个手表,那么您仍然会使用不可用的Dynamic View,但是您可以查看DynamicJsonArray的“固定”属性(如Length),如果单击Result View,则可以看到数组的项目。见图:

enter image description here

答案 1 :(得分:1)

'data'被声明为动态类型,这就是为什么你不能鼠标悬停并看到值。如果您向Watch添加“数据”,您仍然可以看到该值。

答案 2 :(得分:1)

其他答案对我不起作用,但我找到了一种在Visual Studio中查看数组内容的替代方法。

我发现通过查看顶级对象的非公开成员,我们可以在Watch窗口(或IntelliSense)中看到DynamicJsonArray的内容。在其中,我们看到私有_values成员,在里面,我们看到了值。打开相关值后,我们会看到里面的KeyValue成员。

然后我们可以继续打开Value节点,然后打开Results View,它将显示数组中的项目。然后我们可以最终访问集合中的各个项目

enter image description here