使用 Newtonsoft JObject 中的特定前缀更新所有键
Posted
技术标签:
【中文标题】使用 Newtonsoft JObject 中的特定前缀更新所有键【英文标题】:Update all keys with a specific prefix in Newtonsoft JObject 【发布时间】:2022-01-07 08:19:31 【问题描述】:如何在具有特定值的 JObject 中的所有级别上更新具有给定前缀的所有键?例如
"nameOne": "dave",
"age": 23,
"foo":
"nameTwo": "pete",
"age": 56
如何将 nameOne 和 nameTwo (name*) 更新为“chris”?
【问题讨论】:
你能显示你的类链接到 json 吗? @Frenchy 没有其他课程。它只是一个使用 Parse() 方法创建的 JObject: _settings = JObject.Parse(File.ReadAllText(SettingsFile)); 你的对象有多少层,请告诉我们你到目前为止做了什么,错误或问题在哪里? @Serge 它并不比我的例子更深入。我还没有解决方案。 【参考方案1】:如果它没有比你的例子更深,你可以试试这个
_settings = JObject.Parse(File.ReadAllText(SettingsFile));
_settings["nameOne"]="cris";
_settings["foo"]["nameTwo"]="cris";
或者如果你需要一些搜索,试试这个
var searchString = "name";
var newValue = "cris";
foreach (var property in _settings)
var key = property.Key;
if (property.GetType().Name != "JObject")
if (key.Contains(searchString)) _settings[key] = newValue;
else
JObject prop = _settings[key] as JObject;
foreach (var nestedProperty in prop)
var nestedKey = nestedProperty.Key;
if (nestedKey.Contains(searchString)) prop[nestedKey] = newValue;
您也可以使用 StartWith 或 EndsWith 来代替 Contains
在visual studio中测试过
"nameOne": "cris",
"age": 23,
"foo":
"nameTwo": "cris",
"age": 56
【讨论】:
我正在尝试更新与特定模式匹配的所有键,例如所有以“name”开头的键。以上是关于使用 Newtonsoft JObject 中的特定前缀更新所有键的主要内容,如果未能解决你的问题,请参考以下文章
如何使Newtonsoft.Json.Linq.JObject不可变?
Newtonsoft.Json.Linq.JObject.ToObject() 以字符串格式转换日期
无法将类型'Newtonsoft.Json.Linq.JObject'的对象转换为类型
无法将“Newtonsoft.Json.Linq.JObject”类型的对象强制转换为“Newtonsoft.Json.Linq.JArray”