我正在将一个大型 JSON 文件成功读取到 JObjects 中。我要反序列化的类型之一具有 System.Drawing.Color 类型的属性。此属性的 JSON 具有表示颜色的整数值。当我尝试执行 ToObject() 时,我得到
将值 16711680 转换为类型“System.Drawing.Color”时出错。
解决方案似乎是一个简单的 JsonConverter,它可以从整数转换为颜色,但我不知道如何将转换器与现有的 JObject 一起使用。我错过了一些明显的事情吗?
存在超载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));
}
}
Output:
Color [A=0, R=255, G=0, B=0]
Fiddle: https://dotnetfiddle.net/ZA22mD https://dotnetfiddle.net/ZA22mD
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)