1
给定一个任意的Newtonsoft.Json.Linq.JObject,如果你想将一些函数应用于所有出现在其中的字符串值(无论哪里可能) - 无论是作为属性的基本值,还是应用于json,怎么做最好的方法呢?有了json.net,是否有一个简单的方法来操纵所有字符串字段?
给定一个任意的Newtonsoft.Json.Linq.JObject,如果你想将一些函数应用于所有出现在其中的字符串值(无论哪里可能) - 无论是作为属性的基本值,还是应用于json,怎么做最好的方法呢?有了json.net,是否有一个简单的方法来操纵所有字符串字段?
一个简单的方法来做到这一点是使用JContainer.DescendantsAndSelf()
找了根JObject
是字符串值的所有后代,然后更换使用JToken.Replace()
重映射的字符串值:
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);
这真的很光滑 – user655489
这意味着要做到这一点 - 刚才想出了如何。您的个人资料是否提供您的联系信息?我找不到它。 – user655489