我有一个 JSON 字符串(不是我创建的),其标识符在 C# 中无效,如下所示:
"OBSBasic.SelectScene": [],
"libobs.hide_scene_item.Captura de Janela": [],
和
"push-to-mute-delay": 0,
和儿子...
这是完整的 JSON。
我的问题是:
我如何将该 JSON 转换为一种字典,以便我可以喜欢:
dic["sources"][0]["settings"]["window"] = "XXXX";
我不确定 JSON 文件可以具有的所有可能的属性名称,因此我想真正将其转换为基于数组的方法,以便我可以从键而不是从我的用于反序列化的对象的属性名称访问它,例如,如果生成新属性,最终会失败。
我尝试了这样的事情但没有成功:
dynamic data = JsonConvert.DeserializeObject(jsonstr);
data.sources.settings.window = "xxxx";
这导致了运行时异常:
引发的异常: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll 引发的异常: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in 系统核心.dll
我没有其他代码可以显示 b,因为我被困在字典在DeserializeObject<T>()
方法中传递的样子。我想稍后将该 JSON 对象序列化回字符串。
如果将 JSON 解析为JToken
则可以使用要访问数据的语法:
JToken dic = JToken.Parse(json);
Console.WriteLine(dic["sources"][1]["settings"]["window"]);
小提琴:https://dotnetfiddle.net/jZrI44