public class LocalizedConverter : JsonConverter { private string _keyField; private string _valueField; private CamelCasePropertyNamesContractResolver _resolver; public LocalizedConverter(string keyField, string valueField) { _keyField = keyField; _valueField = valueField; _resolver = new CamelCasePropertyNamesContractResolver(); ; } public override bool CanRead => false; public override bool CanConvert(Type objectType) { return true; } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { //Should not be called because CanRead=false throw new NotImplementedException(); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { JToken t = JToken.FromObject(value, new JsonSerializer() { ContractResolver = _resolver }); if (t is JObject o) { var field = _resolver.GetResolvedPropertyName(_valueField); o.Property(field).Value = "localized"; o.WriteTo(writer); } else { t.WriteTo(writer); } } }