如何在动态对象数组C#中追加或改变子项?

时间:2015-12-21 16:33:01

标签: c# arrays dynamic

我有一个动态数组包含JSON响应,我试图改变或添加新的孩子,但它一直给我这个错误:

  

其他信息:' System.Dynamic.DynamicObject'不包含' 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

1 个答案:

答案 0 :(得分:1)

圣诞快乐!

我认为解决此问题的最佳方法是,如果您可以在发生错误之前在运行时进行调试,以查看动态user类型分配是什么。此信息对于确定如何提取所需数据非常有用。

但是,至少从图片中我们可以看到user是一个数组,您应该首先使用数字索引 user[46]来访问它,然后才可以访问其成员(包含vault_data)。

之后

  1. 如果该成员实际上是以KeyValuePair为关键字的"vault_data"(KVP),则应尝试以密钥形式user[46]["vault_data"]提供第二个索引来访问该值。
  2. 如果它不是KVP,而是变量成员,您可以尝试直接访问user[46].vault_data
  3. 如果它实际上是另一个数组,那么您可能需要通过数字形式user[46][1]的第二个索引来访问它(user[46][0]vault_data,因此{{ 1}}是您想要更改的值。
  4. 如果是user[46][1],那么您需要进一步解析string
  5. 在所有可能性中,关键是首先通过索引 user[46]数组来访问该成员。