在用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)
网友评论