Mik*_*ott 12 c# type-conversion json.net converters
我正在成功地将一个大型JSON文件读入JObjects.我要反序列化的类型之一具有System.Drawing.Color类型的属性.此属性的JSON具有表示颜色的整数值.当我尝试做ToObject()时,我得到了
将值16711680转换为类型'System.Drawing.Color'时出错.
解决方案似乎是一个简单的JsonConverter,它可以从一个整数转换为一个Color但我无法找到如何将转换器与现有的JObject一起使用.我错过了一些明显的东西吗
Bri*_*ers 15
有一个超载ToObject<T>
,接受一个JsonSerializer
.序列化程序有一个Converters
集合,您可以在其中添加转换器.
这是一个简短的演示:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Color [A=0, R=255, G=0, B=0]
Run Code Online (Sandbox Code Playgroud)
小提琴:https://dotnetfiddle.net/ZA22mD
归档时间: |
|
查看次数: |
4516 次 |
最近记录: |