Newtonsoft.Json反序列化base64映像失败
我正在使用Newtonsoft.Json将Web服务的输出反序列化到对象。在我Bitmap
向我的课程(名为User
)添加一个属性以保存化身之前,它一直运行良好。
Web服务正按预期返回该属性作为Base64字符串。问题是当我尝试将JSON从WS转换回a时List<User>
,JsonSerializationException
在此代码块中引发了a
:
// T is IList<User>response.Content.ReadAsStringAsync().Proceed(
(readTask) =>
{
var json = ((Task<string>)readTask).Result;
var result = JsonConvert.DeserializeObject<T>(json); //<-- it fails here
// do stuff!
});
异常的输出是:
Error converting value "System.Drawing.Bitmap" to type 'System.Drawing.Bitmap'. Path '[2].Avatar
并查看内部异常:
{"Could not cast or convert from System.String to System.Drawing.Bitmap."}
显然,它无法解析Base64字符串,但不清楚原因。
有任何想法/解决方法吗?
我知道我可以使用Convert.FromBase64String
do获取字节数组并从中加载位图。然后,我想更新我的问题,询问
跳过或手动 解析该字段。我想避免,必须手动解析所有JSON。这有可能吗?
我发现了根本问题:JSON没有在Web服务中正确序列化(并且我看不出为什么)。我认为这是一个有点不同的问题,但是没有。我的Web服务只是返回一个字符串,"System.Drawing.Bitmap"
而不是其base64内容。因此JsonSerializationException
。
我一直无法解决该问题,我发现的唯一解决方案是将自己的领域变成byte []
。
回答:
将该字段读取为字符串,
使用Convert.FromBase64String
和转换为字节数组
使用获取图像 Bitmap.FromStream(new MemoryStream(bytearray));
您可以在自定义 转换器 的帮助下执行图像序列化/反序列化 __
public class AClass{
public Bitmap image;
public int i;
}
Bitmap bmp = (Bitmap)Bitmap.FromFile(@"......");
var json = JsonConvert.SerializeObject(new AClass() { image = bmp, i = 666 },
new ImageConverter());
var aclass = JsonConvert.DeserializeObject<AClass>(json, new ImageConverter());
这是 ImageConverter
public class ImageConverter : 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)
{
var m = new MemoryStream(Convert.FromBase64String((string)reader.Value));
return (Bitmap)Bitmap.FromStream(m);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
Bitmap bmp = (Bitmap)value;
MemoryStream m = new MemoryStream();
bmp.Save(m, System.Drawing.Imaging.ImageFormat.Jpeg);
writer.WriteValue(Convert.ToBase64String(m.ToArray()));
}
}
以上是 Newtonsoft.Json反序列化base64映像失败 的全部内容, 来源链接: utcz.com/qa/406336.html