我正在使用 Newtonsoft.Json 将我的 web 服务的输出反序列化为一个对象。Bitmap
在我向我的类(名为User
)添加一个属性来保存头像之前,它工作得很好。
Web 服务将该属性作为 Base64 字符串返回,这与预期的一样。问题是当我尝试将 JSON 从 WS 转换回 aList<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
获取字节数组并从中加载位图。然后我想更新我的问题以询问如何仅跳过或手动解析该字段。我想避免必须手动解析所有 JSON。这甚至可能吗?
编辑 2
我发现了根本问题:JSON 没有在 web 服务中正确序列化(我不明白为什么)。我认为这是一个有点不同的问题,但不是。我的网络服务只是返回一个字符串"System.Drawing.Bitmap"
而不是它的 base64 内容。因此JsonSerializationException
.
我一直无法解决这个问题,我找到的唯一解决方案是将我的字段变成byte []
.