我该如何序列化这种json?

时间:2016-07-08 02:49:34

标签: c# .net json serialization json.net

我有一个JSON字符串(不是由我创建的),其标识符在C#中无效,如下所示:

"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'中   System.Core.dll

我没有其他代码可以显示因为我坚持认为字典在DeserializeObject<T>()方法中的传递方式。我想稍后将JSON对象序列化回字符串。

1 个答案:

答案 0 :(得分:1)

如果您将JSON解析为JToken,则可以使用您想要访问数据的语法:

    JToken dic = JToken.Parse(json);

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

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