我在使用Newsoft.Json将从我们的Web服务中反序列化的输出转换成对象。
在我为我的类(名为User)添加一个Bitmap属性来存储头像之前,一切都工作得很好。
Web服务返回该属性作为Base64字符串,这是预期的。问题是当我尝试将WS中的JSON转换回List时,下面这段代码会抛出一个JsonSerializationException异常:
很明显它无法解析Base64字符串,但是原因不清楚。有什么想法/解决方法吗?
编辑:我知道我可以使用 Convert.FromBase64String 获取一个字节数组并从中加载位图。然后我想更新我的问题,询问如何跳过或手动解析仅该字段。我想避免手动解析所有JSON。这可能吗?
编辑2:我发现根本问题:JSON在Web服务中没有被正确序列化(我无法理解为什么)。我认为this是一个有点不同的问题,但不是。我的Web服务只返回一个字符串“System.Drawing.Bitmap”,而不是其base64内容。因此出现了JsonSerializationException。我一直无法解决这个问题,我找到的唯一解决方案是将我的字段转换为byte[]。
Web服务返回该属性作为Base64字符串,这是预期的。问题是当我尝试将WS中的JSON转换回List时,下面这段代码会抛出一个JsonSerializationException异常:
// 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服务中没有被正确序列化(我无法理解为什么)。我认为this是一个有点不同的问题,但不是。我的Web服务只返回一个字符串“System.Drawing.Bitmap”,而不是其base64内容。因此出现了JsonSerializationException。我一直无法解决这个问题,我找到的唯一解决方案是将我的字段转换为byte[]。
JsonConvert.DeserializeObject<T>(json)
只跳过一个字段?这是在泛型方法中,所以我想避免完全手动解析... - JoelBitmap
,则此代码将将base64编码的字符串反序列化为位图。请参阅AClass
的定义。 - I4VJsonConvert.SerializeObject(yourObject,new ImageConverter());
。 - I4V