using Newtonsoft.Json.Linq;
static void Main(string[] args) {
var settings = new JsonSerializerSettings();
settings.Converters.Add(new SpecialConverter());
var json = JsonConvert.SerializeObject(new SomeClass { A = 10 }, settings);
if (!json.Contains("SpecialValue"))
throw new Exception("Wrong converter was used.");
[JsonConverter(typeof(UsualConverter))]
class UsualConverter : JsonConverter {
public override bool CanConvert(Type objectType)
=> objectType == typeof(SomeClass);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
var jObject = JObject.ReadFrom(reader);
A = jObject["A"].ToObject<int>(),
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
var jObject = new JObject();
jObject["A"] = ((SomeClass)value).A;
class SpecialConverter : JsonConverter {
public override bool CanConvert(Type objectType)
=> objectType == typeof(SomeClass);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
var jObject = JObject.ReadFrom(reader);
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
var jObject = new JObject();
jObject["A"] = "SpecialValue";