2016-07-08 49 views
1

我有了標識符在C#無效,這樣的JSON字符串(不是由我創建):如何序列化這種json?

"OBSBasic.SelectScene": [], 
"libobs.hide_scene_item.Captura de Janela": [], 

"push-to-mute-delay": 0, 

和兒子...

here's完整的json。

我的問題是:

我如何可以轉換成JSON的一種解釋的,這樣我可以喜歡:

dic["sources"][0]["settings"]["window"] = "XXXX"; 

我不肯定知道所有可能的屬性名稱是JSON文件可以有,所以我想真正將其轉換爲基於數組的方法,以便我可以從密鑰訪問它,而不是來自用於反序列化的對象的屬性名稱,如果新屬性最終會失敗例如,生成。

我嘗試沒有成功是這樣的:

dynamic data = JsonConvert.DeserializeObject(jsonstr); 
data.sources.settings.window = "xxxx"; 

這導致運行時異常:

拋出異常: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' 在 Microsoft.CSharp .dll拋出的異常: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'in System.Core.dll

我沒有其他代碼顯示,因爲我被卡在字典看起來像在DeserializeObject<T>()方法中傳遞的樣子。我想將該JSON對象序列化回字符串。

+0

什麼是例外?編輯你的問題。 –

+0

'dic [「sources」] [「settings」] [「window」] =「XXXX」;' - sources是一個數組,不是字典。你需要類似'dic [「sources」] [0] [「settings」] [「window」] =「XXXX」;'AFAIK。 – yaakov

+0

@EliArbel編輯 – Jack

回答

1

如果您解析您的JSON爲JToken,您可以使用您要訪問您的數據的語法:

JToken dic = JToken.Parse(json); 

    Console.WriteLine(dic["sources"][1]["settings"]["window"]); 

小提琴:https://dotnetfiddle.net/jZrI44

+0

工作正常,謝謝;) – Jack