簡體   English   中英

使用Json.Net,如何將大量文本流式傳輸到單個json屬性?

[英]Using Json.Net, how can I stream a lot of text to a single json property?

我需要構造一個具有單個屬性的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);
        }
    }
}

這僅僅是概念的證明。 當然,實際上,我將從其他地方獲取流(例如文件流)。 數據可能非常大-數百兆字節。 因此,僅使用字符串是不可能的。

這個例子不起作用。 令牌中僅保留最后讀取的塊。 我如何向令牌寫入值並將其附加到先前寫入的內容中而不是替換它?

有沒有更有效的方法可以做到這一點?

為了澄清-被寫入文本尚未 JSON格式。 它更接近人類可讀的文本。 它需要經歷與編寫純字符串值相同的轉義和格式設置。

經過大量研究,我相信答案是“無法完成”。

確實,我認為應該避免使用非常大的字符串的單個JValue。 相反,我將其分解為存儲在JArray中的較小值。

如果我錯了,請發布更好的答案。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM