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));
}
}
输出:
Color [A=0, R=255, G=0, B=0]
小提琴:https://dotnetfiddle.net/ZA22mD
感谢您的!我缺少的是创建转换器,然后将其添加到序列化程序。我不得不说,Json.NET文档需要更高层次的关于这些部分如何组合在一起的概述。 – 2015-04-03 12:56:08
没问题;很高兴我能帮上忙。 – 2015-04-03 13:41:16