我在使用MemoryStream管理字符串时遇到了困难。具体来说,我正在尝试使用JSON,但是不使用内置的序列化/反序列化方法。当使用NewtonSoft JSON编写器时,它相当简单,因为它需要一个TextWriter,所以编写类似于以下内容的东西非常简单:(然后是一段示例代码)
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (newton.JsonWriter writer=new newton.JsonTextWriter(sw))
{
writer.WriteStartObject();
writer.WritePropertyName("Name");
writer.WriteValue("Neil");
writer.WriteEnd();
writer.Flush();
System.Console.WriteLine(sb.ToString());
}
但是当我尝试使用新的 .net Core 3.x 时,它不再接受 TextWriter,而是需要 Stream 或 IBufferWriter。由于不太清楚如何使用 IBufferWriter,我唯一能想到的方法是以下这种方式将流转换为字符串,与之相比似乎有些笨拙。除了设置位置、创建新的读取器并读取到结尾之外,是否有更好的方法呢?
要么找到更好的将内存流转换为字符串的方法,要么使用 IBufferWriter?
MemoryStream ms = new MemoryStream();
System.Text.Json.Utf8JsonWriter writer = new Utf8JsonWriter(ms);
writer.WriteStartObject();
writer.WritePropertyName("Name");
writer.WriteStringValue("Neil");
writer.WriteEndObject();
writer.Flush();
ms.Position = 0;
string output = new StreamReader(ms).ReadToEnd();
Console.WriteLine(output);
谢谢。
ArrayBufferWriter<byte>
来进行写入操作。然后你可以使用WrittenMemory.ToArray()
方法来获取 UTF 8 字节数组。我对于IBufferWriter
的了解也不多,只知道它是一个较新的 API,这就是为什么我在我的回答中使用了MemoryStream
。 - undefined