Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用JSON将MemoryStream转换为字符串_C#_.net Core - Fatal编程技术网

C# 使用JSON将MemoryStream转换为字符串

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

我在使用MemoryStream管理字符串时遇到困难

具体来说,我在使用JSON时没有使用内置的序列化/反序列化方法

当使用NewtonSoft JSON writer时,它非常简单,并且需要一个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());
        }
但是当我尝试使用新的.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
的原因。