首页 > 解决方案 > 收到错误“没有要关闭的令牌。路径''。” 来自 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 ''.

没有关闭路径的令牌

我究竟做错了什么?我无法通过谷歌找到答案。

标签: c#json.net

解决方案


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

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

删除这些行之一以解决问题。你不需要两者。


更详细的解释:

WriteStartObject对and的调用WriteStartArray必须与对WriteEndObjectand的对应调用相平衡WriteEndArray

WriteEnd是关闭最后一个令牌的便捷方法,无论它碰巧是什么类型。WriteEndObject所以它的功能与和相同WriteEndArray

在您的代码中,您WriteStartObject在方法的开头调用一次,然后您同时 WriteEnd调用并WriteEndObject结束它。其中第一个关闭您启动的对象;第二个抛出异常,因为没有什么可以关闭的——你已经关闭了它。


推荐阅读