I was writing some code to serialize a C# class to JSON and needed to export a System.Drawing.Color field as a hex string. Thankfully it's easy to customize the output using Json.NET. I created the following custom converter to save colors as hex strings (like #FFF0B6)
public class ColorHexConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var color = (Color)value; var hexString = color.IsEmpty ? string .Empty : string .Concat( "#" , (color.ToArgb() & 0x00FFFFFF).ToString( "X6" ); writer.WriteValue(hexString); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var hexString = reader.Value.ToString(); if (hexString == null || !hexString.StartsWith( "#" )) return Color.Empty; return ColorTranslator.FromHtml(hexString); } public override bool CanConvert(Type objectType) { return objectType == typeof (Color); } } |
And example usage:
[JsonConverter( typeof (ColorHexConverter))] public Color BackgroundColor; |