2015-12-21 45 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