There is an overload of ToObject<T> that accepts a JsonSerializer . The serializer has a Converters collection to which you can add a converter.
Here is a short demo:
using System; using System.Drawing; using Newtonsoft.Json; using Newtonsoft.Json.Linq; public class Program { public static void Main() { JObject obj = JObject.Parse(@"{ ""Color"" : 16711680 }"); JsonSerializer serializer = new JsonSerializer(); serializer.Converters.Add(new ColorConverter()); Color c = obj["Color"].ToObject<Color>(serializer); Console.WriteLine(c.ToString()); } } class ColorConverter : JsonConverter { public override bool CanConvert(Type objectType) { return (objectType == typeof(Color)); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteValue(((Color)value).ToArgb()); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { return Color.FromArgb(Convert.ToInt32(reader.Value)); } }
Output:
Color [A=0, R=255, G=0, B=0]
Fiddle: https://dotnetfiddle.net/ZA22mD
source share