C# 使用JSON将MemoryStream转换为字符串
我在使用MemoryStream管理字符串时遇到困难 具体来说,我在使用JSON时没有使用内置的序列化/反序列化方法 当使用NewtonSoft JSON writer时,它非常简单,并且需要一个TextWriter,因此使用字符串生成器编写类似的内容:C# 使用JSON将MemoryStream转换为字符串,c#,.net-core,C#,.net Core,我在使用MemoryStream管理字符串时遇到困难 具体来说,我在使用JSON时没有使用内置的序列化/反序列化方法 当使用NewtonSoft JSON writer时,它非常简单,并且需要一个TextWriter,因此使用字符串生成器编写类似的内容: StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); using (newton.Json
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());
}
但是当我尝试使用新的.NETCore3.x时,它不需要文本编写器,而是流或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);
谢谢。您只需调用内存流,将其转换为UTF-8字节数组,然后可以使用编码将其转换为字符串。UTF8.GetString
:
var ms = new MemoryStream();
Utf8JsonWriter writer = new Utf8JsonWriter(ms);
writer.WriteStartObject();
writer.WritePropertyName("Name");
writer.WriteStringValue("Neil");
writer.WriteEndObject();
writer.Flush();
ms.Close();
Console.WriteLine(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
您只需调用内存流,将其转换为UTF-8字节数组,然后可以使用Encoding.UTF8.GetString
将其转换为字符串:
var ms = new MemoryStream();
Utf8JsonWriter writer = new Utf8JsonWriter(ms);
writer.WriteStartObject();
writer.WritePropertyName("Name");
writer.WriteStringValue("Neil");
writer.WriteEndObject();
writer.Flush();
ms.Close();
Console.WriteLine(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
谢谢流比编写器有什么好处?从另一个角度看似乎容易多了。顺便说一句,我找不到任何关于IBufferWriter@Neil您也可以创建一个用于写作的文档。然后可以使用
writenMemory.ToArray()
获取UTF 8字节数组。关于IBufferWriter
我也不太了解,除了它是一个更新的API这一事实,这就是为什么我在回答中使用MemoryStream
的原因。谢谢。流比编写器有什么好处?从另一个角度看似乎容易多了。顺便说一句,我找不到任何关于IBufferWriter@Neil您也可以创建一个用于写作的文档。然后可以使用writenMemory.ToArray()
获取UTF 8字节数组。关于IBufferWriter
我也不太了解,除了它是一个更新的API这一事实,这就是我在回答中使用MemoryStream
的原因。