从 JsonWriter (NewtonSoft.Json 13.0.1) 获取错误 "No token to close. Path ''."

Getting an error "No token to close. Path ''." from JsonWriter (NewtonSoft.Json 13.0.1)

以下代码示例:

using (JsonWriter writer = new JsonTextWriter(sw))
{
    writer.Formatting = Formatting.Indented;
    
    writer.WriteStartObject();

    writer.WritePropertyName("client_id");
    writer.WriteValue(_clientID);
    writer.WritePropertyName("client_secret");
    writer.WriteValue(_clientSecret);
    writer.WritePropertyName("audience");
    writer.WriteValue(_audience);
    writer.WritePropertyName("grant_type");
    writer.WriteValue(_grantType);
    writer.WriteEnd();
    writer.WriteEndObject();
}

Console.WriteLine(sw.ToString());

失败并显示消息 No token to close. Path ''.

我做错了什么?我无法通过 Google.

找到答案

TL;DR:问题是您试图关闭该对象两次:

writer.WriteEnd();
writer.WriteEndObject();

删除其中一行以解决问题。你不需要两者。


更详细的解释:

WriteStartObjectWriteStartArray 的调用必须与对 WriteEndObjectWriteEndArray 的相应调用相平衡。

WriteEnd 是一种关闭最后一个标记的便捷方法,无论它是什么类型。所以它的功能与 WriteEndObjectWriteEndArray 相同。

在您的代码中,您在方法的开头调用了一次 WriteStartObject,但随后调用了 both WriteEndWriteEndObject 以结束它。其中第一个关闭您启动的对象;第二个抛出异常,因为没有要关闭的东西——你已经关闭了它。