我想通过显式构建文档将 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/