C#JsonConvert反序列化Bitmap图像报错问题

2023-03-28  本文已影响0人  堆石成山

在用Newtonsoft.Json.dll中的JsonConvert序列化和反序列化Bitmap图像时,遇到了序列化成功,但是反序列化报错的问题。

主要思想是需要把图片转换为Base64String序列化,反序列化时Base64String在转换为图片。

解决步骤如下:
1、重写JsonConvert中的方法,帮助解析Bitmap

   /// <summary>
    /// 重写JsonConverter中的方法,帮助解析Bitmap
    /// </summary>
    public class BitmapConverter:Newtonsoft.Json.JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return objectType == typeof(Bitmap);
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            MemoryStream ms = new MemoryStream(Convert.FromBase64String((string)reader.Value));
            return (Bitmap)Bitmap.FromStream(ms);
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            Bitmap bmp = (Bitmap)value;
            MemoryStream ms = new MemoryStream();
            bmp.Save(ms,System.Drawing.Imaging.ImageFormat.Png);//可以保存透明背景图片
            writer.WriteValue(Convert.ToBase64String(ms.ToArray()));
        }
    }

2、序列化时,参数为 new BitmapConverter

string serializedString = JsonConvert.SerializeObject(this, new BitmapConverter());

3、反序列化是,参数也改为new BitmapConverter,这里的<Project>为序列化时的this

JsonConvert.DeserializeObject<Project>(serializedString, new BitmapConverter());

做完以上步骤就成功拉,赶紧去试一下吧。(Image类型的图像可以试下,如不行可以换Bitmap)

上一篇 下一篇

猜你喜欢

热点阅读