Разница между ReadAsAsync и JsonConvert

Это работает для всех свойств:

string resultAsString = await httpResponseMessage.Content.ReadAsStringAsync();
return await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<ApiData>(resultAsString));

хотя это работает только для некоторых из них:

return await httpResponseMessage.Content.ReadAsAsync<ApiData>();

В чем разница?

Ответ 1

Бывший читает асинхронно из потока, а затем использует поток потока пулов для десериализации строки JSON для объекта.

Последний считывает асинхронно из потока, но синхронно преобразует строку JSON в объект, в потоке, который возобновился после ожидания асинхронного чтения из потока.

Внутри, оба метода будут использовать Json.NET для анализа данных, поскольку метод расширения HttpContentExtensions.ReadAsAsync<T> будет внутренне вызывать JsonMediaTypeFormatter, который использует Json.NET.

Лично я использую последнее, поскольку я не вижу никакой пользы в выполнении сериализации в фоновом потоке. Но проверьте свой код и посмотрите, работает ли это для вас.