【问题标题】:StreamReader returning nullStreamReader 返回 null
【发布时间】:2020-04-11 22:14:02
【问题描述】:

我的目标是开始使用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)
    }
};

var jsonSerializer = new JsonSerializer();

Stream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
JsonTextWriter jsonWriter = new JsonTextWriter(writer);
jsonSerializer.Serialize(jsonWriter, typiCodes);
jsonWriter.Flush();

// Act
List<TypiCode> result = null;
using (var streamReader = new StreamReader(stream))
{
    using (JsonTextReader jsonTextReader = new JsonTextReader(streamReader))
    {                      
        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?

【问题讨论】:

    标签: c# .net-core stream streamreader


    【解决方案1】:

    写入流后,您就数据后面。你需要重新开始。

    重置流位置:

    // your code
    
    Stream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream);
    JsonTextWriter jsonWriter = new JsonTextWriter(writer);
    jsonSerializer.Serialize(jsonWriter, typiCodes);
    jsonWriter.Flush();
    
    stream.Seek(0, SeekOrigin.Begin);
    
    // more of youre code
    

    独库:

    【讨论】:

    • 谢谢,知道为什么我现在得到Unexpected character encountered while parsing value: . Path '', line 1, position 1.吗?
    • @shar 您使用 BinaryFormatter ...和 ​​JsonTextReader 来回读。这是否适合?我建议朝那个方向探索;)
    • 嘿@Patrick 你是对的!我已经更改为 JsonTextWriter 而不进行处理,并且它起作用了! (见更新的问题)
    猜你喜欢
    • 2014-10-08
    • 2018-07-27
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多