Well, not necessarily the proper way of solving it, but
default:
fields.Add(jToken.Path, (JValue)jToken);
break;
could be
default:
String pathLast = jToken.Path.Split('.').Last();
String tokenLast = (JValue)jToken.Split('.').Last();
fields.Add(pathLast, tokenLast);
break;
[Edit] - will this work ?
foreach (var field in fields)
{
String keyLastSegment = field.Key.ToString().Split('.').Last();
Console.WriteLine($"{keyLastSegment}: {field.Value}");
}
[/Edit]
Obviously if you deserialised the JSON to a List<simple poco> containing the two string fields eg tag, name you'd get the result as well, and wouldnt need to use this fields collector mechanism - since I dont know what else you may be doing with the JSON, it might not be a suitable method