我的目标是开始使用Stream
以读取HTTP内容(HttpResponseMessage.Content
)。就目前而言,我正在使用ReadAsStringAsync
读取内容,并且我想使用ReadAsStreamAsync
来提高性能和内存使用率。
为了实现这一点,我建立了一个小型单元测试,该测试应该安排一个Stream,然后读取它并将其转换为原始对象。
预期结果应为反序列化后的原始对象,但它返回null。
// Arrenge
List<TypiCode> typiCodes = new List<TypiCode>()
{
new TypiCode()
{
Completed = true,
Id = this._random.Next(1000),
Title = Guid.NewGuid().ToString(),
UserId = this._random.Next(1000)
}
};
IFormatter formatter = new BinaryFormatter();
Stream stream = new MemoryStream();
formatter.Serialize(stream, typiCodes);
// Act
List<TypiCode> result = null;
using (var streamReader = new StreamReader(stream))
{
using (JsonTextReader jsonTextReader = new JsonTextReader(streamReader))
{
var jsonSerializer = new JsonSerializer();
result = jsonSerializer.Deserialize<List<TypiCode>>(jsonTextReader);
}
}
//Assert
Assert.IsNotNull(result); //--->Failed!
模型:
[Serializable]
public class TypiCode
{
public int UserId { get; set; }
public int Id { get; set; }
public string Title { get; set; }
public bool Completed { get; set; }
}
为什么StreamReader返回null?
写入流后,您在后面数据。您需要重新开始。
重置流位置:
// your code
Formatter formatter = new BinaryFormatter();
Stream stream = new MemoryStream();
formatter.Serialize(stream, typiCodes);
stream.Seek(0);
// more of youre code