C# “获取错误”;没有可关闭的令牌。路径''&引用;来自JsonWriter(NewtonSoft.Json 13.0.1)
以下代码示例:C# “获取错误”;没有可关闭的令牌。路径''&引用;来自JsonWriter(NewtonSoft.Json 13.0.1),c#,json.net,C#,Json.net,以下代码示例: using (JsonWriter writer = new JsonTextWriter(sw)) { writer.Formatting = Formatting.Indented; writer.WriteStartObject(); writer.WritePropertyName("client_id"); writer.WriteValue(_clientID); writer.WriteProp
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());
失败,消息没有要关闭的令牌。路径“”。
我做错了什么?我无法通过谷歌找到答案;DR:问题是您试图关闭对象两次:
writer.WriteEnd();
writer.WriteEndObject();
请删除其中一行以修复此问题。你不需要两者兼而有之
更详细的解释: 对
WriteStartObject
和writeStarray
的调用必须与对WriteEndObject
和WriteEndArray
的相应调用相平衡
WriteEnd
是一种方便的方法,可以关闭最后一个令牌,不管它是什么类型。因此,它的功能与WriteEndObject
和WriteEndArray
相同
在代码中,在方法的开头调用一次
WriteStartObject
,然后调用WriteEnd
和WriteEndObject
来结束它。第一个关闭您启动的对象;第二个抛出异常,因为没有要关闭的内容——您已经关闭了它。谢谢您的详细回答!请问,您是否建议我坚持使用NewtonSoft或.net5 system.text.json?这完全取决于您的情况。你有理由改变吗?Newtonsoft目前比System.Text.Json具有更多的功能,并且存在的时间更长。System.Json.Text与Newtonsoft有不同的目标。具体来说,它旨在通过支持Span
实现更高的吞吐量,并且在解析方面更加严格。那有关系吗?我不知道。你需要做自己的研究并做出决定。如果没有很好的理由改变,坚持你现有的。