It's not a duplicate as I couldn't find a post explaining why the below happens.
Below is minimal reproducible example that shows MyTypeJsonConverter
never gets called when used with ItemConverterType
. But, it does get called when passed to DeserializeObject
. Why?
MyTypeJsonConverter does NOT get called
public class MyData
{
[JsonProperty("type", ItemConverterType = typeof(MyTypeJsonConverter))]
public MyType MyType { get; set; }
}
static void foo()
{
var json = "{\"type\":\"data\"}";
var obj = JsonConvert.DeserializeObject<MyType>(json);
}
MyTypeJsonConverter does get called
public class MyData
{
[JsonProperty("type")]
public MyType MyType { get; set; }
}
static void foo()
{
var json = "{\"type\":\"data\"}";
var obj = JsonConvert.DeserializeObject<MyType>(json, new MyTypeJsonConverter());
}
MyTypeJsonConverter
public class MyTypeJsonConverter : JsonConverter<MyType>
{
public override MyType ReadJson(JsonReader reader, Type objectType, MyType existingValue, bool hasExistingValue, Newtonsoft.Json.JsonSerializer serializer)
{
return new MyType();
}
public override void WriteJson(JsonWriter writer, MyType value, Newtonsoft.Json.JsonSerializer serializer)
{
throw new NotImplementedException();
}
}