【发布时间】:2021-05-11 12:06:54
【问题描述】:
我想将 JToken 异步写入流。我提到了JToken.WriteToAsync does not write to JsonWriter。
但是,流输出为?[],而ToString() 输出为[]。为什么流的开头包含额外的字节?
我的代码如下:
static async Task Main(string[] args)
{
JArray arr = new JArray();
//var c = JToken.FromObject("abc");
//arr.Add(c);
var stream = new MemoryStream();
await using (var requestWriter = new StreamWriter(stream, System.Text.Encoding.UTF8, leaveOpen: true))
{
var jsonWriter = new JsonTextWriter(requestWriter);
try
{
await arr.WriteToAsync(jsonWriter);
}
finally
{
await jsonWriter.CloseAsync();
}
Console.WriteLine(System.Text.Encoding.UTF8.GetString(stream.GetBuffer(), 0, checked((int)stream.Length)));
Console.WriteLine(arr.ToString());
}
}
为什么流输出不正确? Json.net 的版本是 13.0.1。
【问题讨论】:
-
MemoryStream 用于测试,不用于生产
-
向该尝试添加一个catch,看看是否有异常。这会对你有很大帮助。
-
您在
StreamWriter requestWriter被释放之前访问stream。尝试将对stream.GetBuffer()的呼叫移至await using (var requestWriter ...之外。 -
@tanxin - 除了回答您的问题之外,我还更新了对JToken.WriteToAsync does not write to JsonWriter 的回答,不包括 BOM。