gpt4 book ai didi

c# - 为什么使用此代码会出现 JsonReaderException?

转载 作者:太空狗 更新时间:2023-10-29 20:54:06 25 4
gpt4 key购买 nike

我有这段代码来尝试打开一个 .json 文件并读取它:

[Route("{unit}/{begindate}")]
public string Get(string unit, string begindate)
{
string _unit = unit;
string _begindate = String.Format("{0}01", PlatypusWebReportsConstsAndUtils.HyphenizeYYYYMM(begindate));
string appDataFolder = HttpContext.Current.Server.MapPath("~/App_Data/");
// semi-hardcoded file name for now
string jsonFilename = string.Format("PoisonToe_{0}_{1}.json", _unit, _begindate);
string fullPath = Path.Combine(appDataFolder, jsonFilename);
JObject platypusComplianceJson = JObject.Parse(File.ReadAllText(fullPath));
. . .

在最后一行,我得到:

用户代码未处理 Newtonsoft.Json.JsonReaderException HResult=-2146233088 Message=从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象:

根据我阅读的内容here ,我认为这将是这样做的方法。我做错了什么?

最佳答案

如果没有评论中要求的信息,很难给出更好的答案,但这意味着,正如它所暗示的,当前标记不是对象的开始。

需要明确的是,我们讨论的是 JSON 词汇表中的“对象”,不是 C#/OOP 词汇表意义上的“对象”。

听起来这里发生的事情类似于非 JSON bool.Parse("1")。是的,“1” 是解析方法(例如 int.Parse)的有效输入,但这是错误的方法。

简单的技巧(警告:创可贴修复)是切换到 JToken.ParseJTokenJObjectJArrayJValue 等的多态父级,因此它的解析能够处理更多类型的非结构化输入。

在你这样做之前,我相信你知道,你当然应该仔细检查你的契约(Contract)和文件,看看哪个是错误的。成功解析随后用作 JObjectJArray 肯定没有好处。

为了更好的衡量,一些会导致此错误的文件文本是:

  • (空文件)
  • [{ "test": "val"}](数组)
  • “测试”(字符串)
  • null

我相信这些都应该是 JToken.Parse 的有效输入,但它们都会在 JObject.Parse 上给出此错误,因为它们不是对象.你需要这样的东西:

  • { "test": "val"}
  • { "test": { "val": 2 } }

或者类似的东西。


回到我的 OOP 观点,JObject 不是 JSON.net 中所有内容的基本基本类型,但 JToken 是。所以即使你可以说,

object i = new int[0];

在 C# 中,你不能说,

JObject i = JObject.Parse("[0, 0, 0]");

在 JSON.net 中。

关于c# - 为什么使用此代码会出现 JsonReaderException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34552613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com