如何防止 Newtonsoft JsonSerializer 关闭流?
How to prevent Newtonsoft JsonSerializer to close the stream?
所以我还没有编写我现在正在处理的代码,我正在寻找如何最好地处理这个问题。
现在我有这个。
public static void WriteSymbol(Stream stream, Symbol symbol)
{
using (var streamWriter = new StreamWriter(stream))
{
JsonSerializer.Create(SerializerSettings).Serialize(streamWriter, symbol);
}
}
我希望在测试完成后能够读取流的内容,以便检查集成。问题是现在在序列化流关闭后我无法再从中读取。
我看到了 JsonWriter public bool CloseOutput { get; set; }
,但我没有看到这个静态 JsonSerializer 的内容。
解决此问题的最佳方法是什么?
如何防止 Serializer 关闭流?
有什么方法可以检查 Stream 的内容吗?
尝试这样的事情:
public static void WriteSymbol(Stream stream, Symbol symbol)
{
using (var streamWriter = new StreamWriter(stream))
{
JsonSerializer.Create(SerializerSettings).Serialize(streamWriter, symbol);
// test stream here
}
}
或者不要用 using 语句包围此调用,然后关闭此方法之外的流。
从 .net 4.5 开始,您可以使用 StreamWriter
的 LeaveOpen
构造函数参数。
StreamWriter
使用的默认缓冲区大小是 1024,在反编译类型时可见。
因此您可以执行以下操作。
using (var streamWriter = new StreamWriter(stream, Encoding.UTF8, 1024, true))
{
// TODO: do something
}
所以我还没有编写我现在正在处理的代码,我正在寻找如何最好地处理这个问题。
现在我有这个。
public static void WriteSymbol(Stream stream, Symbol symbol)
{
using (var streamWriter = new StreamWriter(stream))
{
JsonSerializer.Create(SerializerSettings).Serialize(streamWriter, symbol);
}
}
我希望在测试完成后能够读取流的内容,以便检查集成。问题是现在在序列化流关闭后我无法再从中读取。
我看到了 JsonWriter public bool CloseOutput { get; set; }
,但我没有看到这个静态 JsonSerializer 的内容。
解决此问题的最佳方法是什么? 如何防止 Serializer 关闭流? 有什么方法可以检查 Stream 的内容吗?
尝试这样的事情:
public static void WriteSymbol(Stream stream, Symbol symbol)
{
using (var streamWriter = new StreamWriter(stream))
{
JsonSerializer.Create(SerializerSettings).Serialize(streamWriter, symbol);
// test stream here
}
}
或者不要用 using 语句包围此调用,然后关闭此方法之外的流。
从 .net 4.5 开始,您可以使用 StreamWriter
的 LeaveOpen
构造函数参数。
StreamWriter
使用的默认缓冲区大小是 1024,在反编译类型时可见。
因此您可以执行以下操作。
using (var streamWriter = new StreamWriter(stream, Encoding.UTF8, 1024, true))
{
// TODO: do something
}