1
我需要構建一個JObject
,它有一個可能包含大量文本的屬性。我從流中讀取了該文本,但我無法弄清楚如何將它寫入一個JToken
。使用Json.Net,我怎樣才能流很多文本到單個json屬性?
這裏是我試過到目前爲止:
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格式。它更接近人類可讀的文本。它需要經過與編寫純字符串值時發生的相同的轉義和格式化。