在流中使用 SeekOrigin.Begin 时不支持指定的方法
Specified method is not supported while using SeekOrigin.Begin on stream
我有一个 StreamReader
,稍后我用它来反序列化我的请求,如下所示 -
这里s
是Stream
对象-
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);
}
}
此更改后,我收到一个错误 - Specified method is not supported.
我不确定我在这里做错了什么。
注意:这只是为了调试目的,我想在控制台上打印正文。之后我会删除 reader.ReadToEnd();
东西。
并非所有流都支持搜索。流有 CanSeek
属性,在这种情况下可能是 false
。
在这种特定情况下,由于您无论如何都要将整个消息读入一个字符串,因此您可以从该字符串创建一个 StringReader 并将其传递到 JsonTextReader 而不是 StreamReader。
在其他情况下,您可能需要寻找不同的解决方案。例如,如果您正在阅读 ASP.NET 核心请求流,您可以 enable buffering to allow the stream to be read multiple times.
我有一个 StreamReader
,稍后我用它来反序列化我的请求,如下所示 -
这里s
是Stream
对象-
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);
}
}
此更改后,我收到一个错误 - Specified method is not supported.
我不确定我在这里做错了什么。
注意:这只是为了调试目的,我想在控制台上打印正文。之后我会删除 reader.ReadToEnd();
东西。
并非所有流都支持搜索。流有 CanSeek
属性,在这种情况下可能是 false
。
在这种特定情况下,由于您无论如何都要将整个消息读入一个字符串,因此您可以从该字符串创建一个 StringReader 并将其传递到 JsonTextReader 而不是 StreamReader。
在其他情况下,您可能需要寻找不同的解决方案。例如,如果您正在阅读 ASP.NET 核心请求流,您可以 enable buffering to allow the stream to be read multiple times.