c# - 在流中使用 SeekOrigin.Begin 时不支持指定的方法

标签 c# streamreader

我有一个 StreamReader,稍后我用它来反序列化我的请求,如下所示 -

这里的sStream对象-

using (var reader = new StreamReader(s))
{
    using (var jsonReader = new JsonTextReader(reader))
    {
        var ser = new JsonSerializer();
        return ser.Deserialize<T>(jsonReader);
    }
}

一切正常,但现在我试图在控制台上打印实际的请求正文,所以我这样尝试,但它给了我一个错误 -

using (var reader = new StreamReader(s))
{
    string body = reader.ReadToEnd();
    // print body on the console which is what I am trying to do
    // reset to start of stream
    // this line gives me error
    s.Seek(0, SeekOrigin.Begin);
    using (var jsonReader = new JsonTextReader(reader))
    {
        var ser = new JsonSerializer();
        return ser.Deserialize<T>(jsonReader);
    }
}

此更改后,我收到错误消息 - 不支持指定的方法。我不确定我在这里做错了什么。

注意:这只是为了调试目的,我想在控制台上打印正文。之后,我将删除 reader.ReadToEnd(); 内容。

最佳答案

并非所有流都支持搜索。 Stream 具有 CanSeek 属性,在这种情况下可能是 false

在这种特定情况下,由于您无论如何都要将整个消息读入一个字符串,因此您可以从该字符串创建一个 StringReader 并将其传递给 JsonTextReader 而不是 StreamReader。

在其他情况下,您可能需要寻找不同的解决方案。例如,如果您正在读取 ASP.NET Core 请求流,您可以 enable buffering to allow the stream to be read multiple times .

关于c# - 在流中使用 SeekOrigin.Begin 时不支持指定的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67894745/

相关文章:

c# - 将默认值添加到下拉列表中

c# - 无法执行显式转换

c# - 仅去除字符串中数字包围的逗号

c# - StreamWriter 多线程 C#

C# Mongodb FindOneAndReplace 或 ReplaceOne 不起作用

c# - 动态构建查询

c# - 如何可靠地将原始 XML 字符串写入文件,写入 base-64 编码字符串?

c# - 为什么我的流式阅读器和编写器突然停止工作?

c# - 在特定行之后读取行

c# - 使用 '#region' 作为快速修复以避免重构为更小的函数