如何防止 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 开始,您可以使用 StreamWriterLeaveOpen 构造函数参数。

StreamWriter 使用的默认缓冲区大小是 1024,在反编译类型时可见。

因此您可以执行以下操作。

using (var streamWriter = new StreamWriter(stream, Encoding.UTF8, 1024, true))
{
    // TODO: do something 
}