如何防止Newtonsoft JsonSerializer关闭流?

时间:2017-07-13 11:04:16

标签: c# stream json.net streamwriter jsonserializer

所以我还没有编写我现在正在处理的代码,而且我正在寻找如何最好地处理这个问题。

现在我有了这个。

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的内容吗?

2 个答案:

答案 0 :(得分:4)

从.net 4.5以上,您可以使用LeaveOpen的{​​{1}}构造函数参数。

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

所以你可以做到以下几点。

StreamWriter

答案 1 :(得分:0)

尝试这样的事情:

public static void WriteSymbol(Stream stream, Symbol symbol)
{
    using (var streamWriter = new StreamWriter(stream))
    {
        JsonSerializer.Create(SerializerSettings).Serialize(streamWriter, symbol); 
        // test stream here               
    }
}

或者不要使用using语句包围此调用,然后关闭此方法之外的流。