美文网首页
C#JsonConvert反序列化Bitmap图像报错问题

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

作者: 堆石成山 | 来源:发表于2023-03-28 22:29 被阅读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)

相关文章

网友评论

      本文标题:C#JsonConvert反序列化Bitmap图像报错问题

      本文链接:https://www.haomeiwen.com/subject/hopxddtx.html