2016-07-08 8 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ファイルを持つことができるので、実際には配列ベースの方法に変換して、キーからアクセスできるようにしたいと思います。新しいプロパティがあった場合に最終的に失敗するデシリアライズされたオブジェクトのプロパティ名例えば、生成される。

は、私はこのような成功何かせずに試してみました:

例外がスローさ: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' を Microsoft.CSharpにランタイム例外が発生した

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

.dll例外がスローされました: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in System.Core.dll

私は辞書がどのように見えるようになっているかについていないので表示するコードが他にありませんDeserializeObject<T>()メソッドです。 JSONオブジェクトを後で文字列に戻してシリアル化したいと思います。

+0

?あなたの質問を編集してください。 –

+0

'dic [" sources "] [" settings "] [" window "] =" XXXX ";' sourcesは辞書ではなく配列です。 'dic [" sources "] [" settings "] [" window "] =" XXXX "; AFAIKのようなものが必要です。 – yaakov

+0

@EliArbel編集 – Jack

答えて

1

あなたがJTokenにあなたのJSONを解析する場合は、あなたがあなたのデータにアクセスしたい構文を使用することができます。

JToken dic = JToken.Parse(json); 

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

フィドル:例外は何だったhttps://dotnetfiddle.net/jZrI44

+0

、うまくいきました、ありがとう;) – Jack

関連する問題