c# - 将 JSON 写入流而不在内存中缓冲字符串

标签 c# .net json io

我想通过显式构建文档将 JSON 写入 Stream。例如:

var stream = ...;
var writer = new JsonWriter(stream);

writer.BeginArray();
{
  writer.BeginObject();
  {
    writer.String("foo");
    writer.Number(1);
    writer.String("bar");
    writer.Number(2.3);
  }
  writer.EndObject();
}
writer.EndArray();

这会产生:

[
  {
    "foo": 1,
    "bar": 2.3
  }
]

这种方法的好处是不需要在内存中缓冲任何内容。在我的情况下,我正在向流中写入大量 JSON。 this one 等解决方案涉及在内存中创建所有对象,然后将它们序列化为内存中的大字符串,最后将此字符串写入流和垃圾收集,可能来自 LOH。 .我想保持低内存使用,在从另一个文件/数据库/等流读取数据时写出元素。

通过 rapidjson library 在 C++ 中可以使用这种方法。 .

我为此进行了大量搜索,但没有找到解决方案。

最佳答案

原来我需要谷歌一段时间。

JSON.NET 确实通过其 JsonWriter 支持这一点类。

我的例子会这样写:

Stream stream = ...;

using (var streamWriter = new StreamWriter(stream))
using (var writer = new JsonTextWriter(streamWriter))
{
    writer.Formatting = Formatting.Indented;

    writer.WriteStartArray();
    {
        writer.WriteStartObject();
        {
            writer.WritePropertyName("foo");
            writer.WriteValue(1);
            writer.WritePropertyName("bar");
            writer.WriteValue(2.3);
        }
        writer.WriteEndObject();
    }
    writer.WriteEndArray();
}

关于c# - 将 JSON 写入流而不在内存中缓冲字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18269958/

相关文章:

jquery - 循环遍历json数组Jquery

json - RESTful json 响应在 tomcat 上失败但在 GlassFish 中有效

c# - 自定义授权策略

c# - SQL 日期排序依据

c# - MVC 请求上的 Ninject 上下文绑定(bind)

c# - 是否可以注入(inject)到asp.net web api模型类中

c# - 使用 .NET 创建磁盘镜像

c# - 无法使用 mdbg 从进程分离

.net - 获取数据表列的下一个自动增量值?

java - HTTP POST 到 MySQL 数据库 AyncTask 错误。强制关闭