using Newtonsoft.Json.Linq;
public static void Main(string[] args)
JObject o1 = JObject.Parse(@"{
JObject o2 = JObject.Parse(@"{
'Roles': [ 'User', 'Admin' ],
'qwerty': [ 'qwe', 'Ad3e4rmin' ],
RecursiveReplace(o1, o2);
Console.WriteLine(o1.ToString());
private static void RecursiveReplace(JToken t1, JToken t2)
foreach (var item in t1.Children())
if (item.HasValues && item is JProperty &&(((JProperty)item).Value.Type == JTokenType.Property || ((JProperty)item).Value.Type == JTokenType.Object))
RecursiveReplace(item, t2);
else if (item.HasValues && item is JObject)
RecursiveReplace(item, t2);
else if (item is JProperty && (!((JProperty)item).Value.HasValues || ((JProperty)item).Value.Type == JTokenType.Array))
var val = t2[item.Path] ?? t2.SelectToken(item.Path);
t1[((JProperty)item).Name].Replace(val);