Я использую Newtonsoft.Json для десериализации вывода из моего веб-сервиса для объекта. Он работал нормально до тех пор, пока я не добавил свойство Bitmap
в мой класс (с именем User
), чтобы держать аватар.Newtonsoft.Json deserializing base64 image failed
Вебсервис возвращает это свойство как строку Base64, которая как и ожидалось. Проблема заключается в том, когда я пытаюсь преобразовать обратно в JSON от WS до List<User>
, 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, но непонятно, почему.
Любые идеи/временное решение?
EDIT Я знаю, что я могу использовать Convert.FromBase64String
действительно получить массив байтов и загрузки растрового изображения из этого. Затем я хотел бы обновить свой вопрос, чтобы узнать о , как можно пропустить или вручную разобрать только это поле. Я бы хотел избежать, чтобы вручную разобрать все JSON. Возможно ли это?
EDIT 2 я узнал, корень проблемы: JSON не будучи правильно сериализовать в WebService (и я не понимаю, почему). Я думал, что this был несколько иной проблемой, но нет. Мой веб-сервис просто возвращает строку "System.Drawing.Bitmap"
вместо ее содержимого base64. Следовательно, JsonSerializationException
.
Я не смог решить эту проблему, единственным решением, которое я нашел, является превращение моего поля в byte []
.
Пожалуйста, обратитесь к моему редактируемого вопрос. Есть ли способ сделать 'JsonConvert.DeserializeObject (json)' пропускать только поле? Это внутри общего метода, поэтому я хотел бы избежать полного ручного анализа ... –
Joel
@Joel См. Мое редактирование ..... Нет необходимости в регулярном выражении или ручном анализе строки json. – I4V
С помощью этого кода мне приходится вручную сериализовать свой объект в веб-сервисе, не так ли? – Joel