使用json.net,是否有一种操作所有字符串字段的简短方法?

时间:2017-09-11 05:50:13

标签: json.net

给定一个任意的Newtonsoft.Json.Linq.JObject,如果你想将一些函数应用于其中出现的所有字符串值(无论在哪里) - 无论是作为属性的基本值,还是作为数组中的json,最好的方法是什么?

1 个答案:

答案 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);