我正在使用DataContractJsonSerializer
,它喜欢输出到Stream.我想要对串行器的输出进行顶部和尾部处理,因此我使用StreamWriter交替写入我需要的额外位.
var ser = new DataContractJsonSerializer(typeof (TValue));
using (var stream = new MemoryStream())
{
using (var sw = new StreamWriter(stream))
{
sw.Write("{");
foreach (var kvp in keysAndValues)
{
sw.Write("'{0}':", kvp.Key);
ser.WriteObject(stream, kvp.Value);
}
sw.Write("}");
}
using (var streamReader = new StreamReader(stream))
{
return streamReader.ReadToEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到一个ArgumentException
"流不可读".
我可能在这里做错了所以所有答案都欢迎.谢谢.
bool MemoryStream.TryGetBuffer(out ArraySegment<byte> buffer)
是.NET 4.6中的一个新API,可用于访问存储在MemoryStream中的有效字节,而无需复制它们.这非常令人兴奋!它返回一个bool,如果转换成功则为"true;否则为false"并填充out参数.
什么时候返回true,表示out ArraySegment<byte> buffer
现在包含有效信息?今天没有记录.
我知道如果它返回false,我可以.ToArray()
用来获取字节的副本.并且,我们已经拥有.GetBuffer()
,但有时MemoryStreams是在缓冲区中创建的,并且这些信息很难(好吧,等等)以后再使用,更不用说try ... catch
稳健性所需了.