C# 使用Json.Net,如何将大量文本流式传输到单个Json属性?

C# 使用Json.Net,如何将大量文本流式传输到单个Json属性?,c#,stream,json.net,C#,Stream,Json.net,我需要构造一个具有单个属性的JObject,该属性可能包含大量文本。我从一个流中读取此文本,但我不知道如何将其写入单个JToken 以下是我迄今为止所尝试的: using (var stream = new MemoryStream()) { using (var streamWriter = new StreamWriter(stream)) { // write a lot of random text to the stream var do

我需要构造一个具有单个属性的
JObject
,该属性可能包含大量文本。我从一个流中读取此文本,但我不知道如何将其写入单个
JToken

以下是我迄今为止所尝试的:

using (var stream = new MemoryStream())
{
    using (var streamWriter = new StreamWriter(stream))
    {
        // write a lot of random text to the stream
        var docSize = 1024 * 1024;
        var rnd = new Random();
        for (int i = 0; i < docSize; i++)
        {
            var c = (char) rnd.Next('A', 'Z');
            streamWriter.Write(c);
        }
        streamWriter.Flush();
        stream.Seek(0, SeekOrigin.Begin);

        // read from the stream and write a token
        using (var streamReader = new StreamReader(stream))
        using (var jTokenWriter = new JTokenWriter())
        {
            const int blockSize = 1024;
            var buffer = new char[blockSize];
            while (!streamReader.EndOfStream)
            {
                var charsRead = streamReader.Read(buffer, 0, blockSize);
                var str = new string(buffer, 0, charsRead);
                jTokenWriter.WriteValue(str);
            }

            // add the token to an object
            var doc = new JObject();
            doc.Add("Text", jTokenWriter.Token);

            // spit out the json for debugging
            var json = doc.ToString(Formatting.Indented);
            Debug.WriteLine(json);
        }
    }
}
使用(var stream=new MemoryStream())
{
使用(var streamWriter=新streamWriter(流))
{
//向流中写入大量随机文本
var docSize=1024*1024;
var rnd=新随机数();
对于(int i=0;i
这只是一个概念证明。当然,实际上,我将从其他地方获取流(例如,文件流)。数据可能非常大——数百兆字节。所以仅仅使用字符串是不可能的

这个例子不起作用。令牌中只剩下最后读取的块。如何将值写入令牌,并将其附加到先前写入的内容,而不是替换它

有没有更有效的方法


澄清一下-正在编写的文本尚未采用json格式。它更接近于人类可读的文本。如果你写一个普通的字符串值,它将需要经历同样的转义和格式化过程。

经过大量研究,我相信答案是“这不可能完成”

实际上,我认为一个非常大的字符串的单个JValue是需要避免的。相反,我将其分解为存储在JArray中的较小值

如果我错了,请发布一个更好的答案。谢谢