给定一个任意的Newtonsoft.Json.Linq.JObject,如果你想将一些函数应用于其中出现的所有字符串值(无论在哪里) - 无论是作为属性的基本值,还是作为数组中的json,最好的方法是什么?
答案 0 :(得分:4)
执行此操作的一种简单方法是使用JContainer.DescendantsAndSelf()
查找作为字符串值的根JObject
的所有后代,然后使用JToken.Replace()
将重新映射的字符串替换为值:< / p>
public static class JsonExtensions
{
public static JToken MapStringValues(this JContainer root, Func<string, string> func)
{
foreach (var value in root.DescendantsAndSelf().OfType<JValue>().Where(v => v.Type == JTokenType.String).ToList())
value.Replace((JValue)func((string)value.Value));
return root;
}
}
然后使用它:
jObj.MapStringValues(s => "remapped " + s);