我有一个 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);
}
}
此更改后,我收到错误消息 - 不支持指定的方法。
我不确定我在这里做错了什么。
注意:这只是为了调试目的,我想在控制台上打印正文。之后,我将删除 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/