2015-04-02 10 views
7

JObjects içine başarılı bir şekilde büyük bir JSON dosyası okuyorum. Serileştirdiğim türlerden biri, System.Drawing.Color türünde bir özelliğe sahiptir. Bu özellik için JSON, rengi temsil eden bir tamsayı değerine sahiptir. BenJToken.ToObject <>() yöntemiyle JsonConverter nasıl kullanılır?

Error converting value 16711680 to type 'System.Drawing.Color'. 

çözüm Renk bir tamsayı dönüştürebilirsiniz basit JsonConverter gibi görünüyor ama varolan ile dönüştürücü nasıl kullanılacağını öğrenmek edemez olsun) (a ToObject yapmaya çalıştığınızda JObject. Belli bir şey eksik miyim?

cevap

9

JsonSerializer kabul eden ToObject<T> bir aşırı yüklenme var. Serializer, dönüştürücünüzü ekleyebileceğiniz bir Converters koleksiyonuna sahiptir.

Burada kısa bir demo:

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

Çıktı:

Color [A=0, R=255, G=0, B=0] 

Fiddle: bunun için https://dotnetfiddle.net/ZA22mD

+0

teşekkürler! Kaybettiğim şey dönüştürücüyü oluşturup bunu bir serileştiriciye eklemekti. Söylemeliyim ki, Json.NET dokümantasyonunun parçaların birbirine nasıl uyduğu konusunda daha üst düzey bir genel bakışa ihtiyacı var. –

+0

Sorun yok; yardımcı olduğuma sevindim. –