将JSON写入流而不缓冲内存中的字符串
我想通过显式构建文档来将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。 像这样的解决方案涉及在内存中创建所有对象,然后将它们序列化为内存中的大字符串,然后最终将此字符串写入流和垃圾收集,可能来自LOH 。 我希望保持低内存使用率,在从另一个文件/ DB / etc流中读取数据时写出元素。
这种方法可以通过rapidjson库在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(); }