2015-12-21 69 views
1

我有一个动态数组包含JSON响应,我试图改变或增加新的孩子,但它不断给我这个错误:如何追加或更改动态对象数组中的子对象C#?

Additional information: 'System.Dynamic.DynamicObject' does not contain a definition for 'vault_data'

这是我的代码:

dynamic user = getData(apiKey); //return a dynamic JSON array .. vault_data contains a string 
user.vault_data = "Trying to alter this child"; // here occur the error when I try to alter the child 
user.data = "Trying to add new child"; // this will through the same error 

图片:

enter image description here

+0

它可能是一个键值对。尝试:'用户[“vault_data”] =“试图改变这个孩子”;' –

+0

@JasonFaulkner不幸的是,它没有工作'附加信息:无法将索引与[]应用到类型'System.Dynamic.DynamicObject' ',我可以看到像这样的MessageBox.Show(user.vault_data);'这就是为什么我很困惑为什么我的方法没有工作。 – 0x00

+0

这是使用动态或var的缺点,类型相当不清楚。不过,我在图像中看到vault_data在某种'Array'中。用户是一个数组吗? – Ian

回答

1

圣诞快乐!

我认为解决这个最好的办法是,如果你能在运行时之前的错误发生,看看有什么是分配给动态user类型调试。这些信息对你确定如何提取你想要的数据非常有用。

但是因为在从图像至少,我们可以看到user是一个数组,你应该先使用数量指数user[46],然后才能访问其成员(其中包含vault_data)访问它。

  1. 后如果成员与"vault_data"是关键实际上是一个KeyValuePair(KVP)是,你应该尽量给关键的形式user[46]["vault_data"]秒索引来访问值。
  2. 如果它不是KVP,而是一个可变成员,则可以尝试直接访问它user[46].vault_data。如果它实际上是另一个阵列,那么您可能需要以编号user[46][1]user[46][0]vault_data,因此user[46][1]是您想要更改的值)的第二索引访问它。
  3. 而如果是一个string,那么你就需要进一步的解析user[46]

在所有的可能性,关键是要通过索引user阵列首先访问成员。

+0

非常感谢你试图帮助的人,是的它是KVP我已经尝试了所有的方法,没有任何运气,我认为它是只读的,这里是我用来解析json响应的类http://stackoverflow.com/一个/3785047分之3806407。 – 0x00

+0

我看,它是只读的。索引可以让你阅读它,但不能写任何东西,是吗? – Ian

+0

正确,我如何覆盖它? – 0x00