Используя Web API 2.2, предположим, что я хочу читать из HttpContent дважды, каждый раз как другой тип.
await httpContent.LoadIntoBufferAsync(); //necessary to buffer content for multiple reads
var X = await httpContent.ReadAsAsync<T>(); //read as first type
var Y = await httpContent.ReadAsAsync<Dictionary<string, object>>(); //read as second type
Когда я запускаю вышеуказанный код, X является непустым экземпляром T, а Y - null. Если я переключу порядок, Y будет не нулевым, а X будет null. Другими словами, второй и последующие вызовы ReadAsAsync всегда будут возвращать нулевое значение, если только они не вызываются с тем же общим параметром типа. Независимо, либо вызов ReadAsAsync работает, как и ожидалось (даже при ненужном вызове LoadIntoBufferAsync).
Это неожиданно для меня - кажется, что я должен иметь возможность читать буферизованный контент как разные типы столько раз, сколько хочу. Если я добавлю еще одну строку:
var Z = await httpContent.ReadAsString();
Результат Z будет непустой строкой, независимо от порядка присвоения X, Y, Z.
Итак, как это происходит, и почему я не могу читать из HttpContent с помощью ReadAsAsync с несколькими типами?