【问题标题】:Converting MemoryStream to String with JSON使用 JSON 将 MemoryStream 转换为字符串
【发布时间】:2020-04-22 02:13:40
【问题描述】:

我在使用 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);

谢谢。

【问题讨论】:

    标签: c# .net-core


    【解决方案1】:

    您可以在内存流上调用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 你也可以创建一个ArrayBufferWriter<byte> 用于写作。然后您可以使用WrittenMemory.ToArray() 来获取UTF 8 字节数组。我对IBufferWriter 也不太了解,只是它是一个较新的API,这就是我在回答中使用MemoryStream 的原因。
    猜你喜欢
    • 2018-06-28
    • 2018-12-17
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多