Json.NET - 如何使用自定义解析序列化的类 [英] Json.NET - How to serialize a class using custom resolver

查看:107
本文介绍了Json.NET - 如何使用自定义解析序列化的类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想序列化这个类:

 公共类CarDisplay
{
    公共字符串名称{;组; }
    公共字符串品牌{获得;组; }
    公共字符串年度{获得;组; }

    公共PictureDisplay [] {图片搞定;组; }
}

公共类PictureDisplay
{
    公众诠释编号{获得;组; }
    公共字符串SecretKey的{获得;组; }
    公共字符串AltText {获得;组; }
}
 

要此JSON测试:

{   产品名称:名称值,   品牌:品牌价值,   年份:年值,   图片:为url1,URL2,URL3]  }

请注意所有的图片类具有的属性,每车有一个图片数组只有URL字符串代替。

我知道, Json.NET 定制解析器的概念,但我不知道究竟如何使用它。

解决方案

 公共类PictureDisplayConverter:JsonConverter
{
   公众覆盖无效WriteJson(JsonWriter作家,对象的值,JsonSerializer串行)
   {
        //转换图片的数组JSON字符串;
   }

   公众覆盖对象ReadJson(JsonReader读者,类型的objectType,JsonSerializer串行)
   {
       //转换回JSON字符串转换成图像阵列
   }

   公众覆盖布尔CanConvert(类型的objectType)
   {
        返回true;
   }
}
 

在你的车显示类:

 公共类CarDisplay
{
    公共字符串名称{;组; }
    公共字符串品牌{获得;组; }
    公共字符串年度{获得;组; }

    [JsonConverter(typeof运算(PictureDisplayConverter))]
    公共PictureDisplay [] {图片搞定;组; }
}
 

I want to serialize this class:

public class CarDisplay
{
    public string Name { get; set; }
    public string Brand { get; set; }
    public string Year { get; set; }

    public PictureDisplay[] Pictures { get; set; }
} 

public class PictureDisplay
{
    public int Id { get; set; }
    public string SecretKey { get; set; }
    public string AltText { get; set; }
}

To this Json test:

{ Name: "Name value", Brand: "Brand value", Year: "Year value", Pictures: ["url1", "url2", "url3"] }

Note that each Car have an pictures array with only url string, instead of all the properties that Picture class have.

I know that Json.NET have the notion of Custom Resolver, but I don't sure exactly how to use it.

解决方案

public class PictureDisplayConverter : JsonConverter
{
   public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
   {
        // convert array of picture to json string;
   }

   public override object ReadJson(JsonReader reader, Type objectType, JsonSerializer serializer)
   {
       // convert back json string into array of picture
   }

   public override bool CanConvert(Type objectType)
   {
        return true;
   }
}

In your car display class:

public class CarDisplay
{
    public string Name { get; set; }
    public string Brand { get; set; }
    public string Year { get; set; }

    [JsonConverter(typeof(PictureDisplayConverter ))]
    public PictureDisplay[] Pictures { get; set; }
}

这篇关于Json.NET - 如何使用自定义解析序列化的类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆