Используя 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
с несколькими типами?