TextWriter使用单独
JsonTextWriter的一行写一行,并为每行设置[`CloseOutput
false`](http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonWriter_CloseOutput.htm):
public static partial class JsonExtensions{ public static void TonewlineDelimitedJson<T>(Stream stream, IEnumerable<T> items) { // Let caller dispose the underlying stream using (var textWriter = new StreamWriter(stream, new UTF8Encoding(false, true), 1024, true)) { TonewlineDelimitedJson(textWriter, items); } } public static void TonewlineDelimitedJson<T>(TextWriter textWriter, IEnumerable<T> items) { var serializer = JsonSerializer.CreateDefault(); foreach (var item in items) { // Formatting.None is the default; I set it here for clarity. using (var writer = new JsonTextWriter(textWriter) { Formatting = Formatting.None, CloseOutput = false }) { serializer.Serialize(writer, item); } // https://web.archive.org/web/20180513150745/http://specs.okfnlabs.org/ndjson/ // Each JSON text MUST conform to the [RFC7159] standard and MUST be written to the stream followed by the newline character n (0x0A). // The newline charater MAY be preceeded by a carriage return r (0x0D). The JSON texts MUST NOT contain newlines or carriage returns. textWriter.Write("n"); } }}
样品提琴。
由于单个NDJSON行可能很短,但行数可能很大,因此此答案提出了一种流传输解决方案,以避免分配大于85kb的单个字符串的必要性。如 Newtonsoft
Json.NET Performance
Tips中所述
,此类大字符串最终会出现在大对象堆上,并可能随后降低应用程序性能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)