Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将JsonConverter与JToken.ToObject一起使用<&燃气轮机;()方法?_C#_Json.net_Type Conversion_Converters - Fatal编程技术网

C# 如何将JsonConverter与JToken.ToObject一起使用<&燃气轮机;()方法?

C# 如何将JsonConverter与JToken.ToObject一起使用<&燃气轮机;()方法?,c#,json.net,type-conversion,converters,C#,Json.net,Type Conversion,Converters,我正在将一个大的JSON文件成功地读入作业对象。我要反序列化到的其中一个类型具有System.Drawing.Color类型的属性。此属性的JSON有一个表示颜色的整数值。当我尝试做ToObject()时,我得到 将值16711680转换为类型“System.Drawing.Color”时出错 解决方案似乎是一个简单的JsonConverter,它可以将整数转换为颜色,但我不知道如何将该转换器用于现有的JObject。我是否遗漏了一些明显的内容?有一个超负荷的ToObject接受JsonSeri

我正在将一个大的JSON文件成功地读入作业对象。我要反序列化到的其中一个类型具有System.Drawing.Color类型的属性。此属性的JSON有一个表示颜色的整数值。当我尝试做ToObject()时,我得到

将值16711680转换为类型“System.Drawing.Color”时出错


解决方案似乎是一个简单的JsonConverter,它可以将整数转换为颜色,但我不知道如何将该转换器用于现有的JObject。我是否遗漏了一些明显的内容?

有一个超负荷的
ToObject
接受
JsonSerializer
。序列化程序有一个
转换器
集合,您可以在其中添加转换器

下面是一个简短的演示:

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));
    }
}

小提琴手:

谢谢你!我缺少的一点是创建转换器,然后将其添加到序列化程序中。我必须说,Json.NET文档需要更高级别的概述,说明各个部分是如何组合在一起的。
Color [A=0, R=255, G=0, B=0]