- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有这段代码来尝试打开一个 .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.Parse
。 JToken
是 JObject
、JArray
、JValue
等的多态父级,因此它的解析能够处理更多类型的非结构化输入。
在你这样做之前,我相信你知道,你当然应该仔细检查你的契约(Contract)和文件,看看哪个是错误的。成功解析随后用作 JObject
的 JArray
肯定没有好处。
为了更好的衡量,一些会导致此错误的文件文本是:
(空文件)[{ "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/
我在部署的系统上收到以下错误: See the end of this message for details on invoking just-in-time (JIT) debugging ins
我有一个使用 Angular 和 C# 的网络项目。 在 C# Controller 中,我想读取用于测试的本地 json 文件的内容。 这是我运行的代码,用于从我的工作目录中读取 JSON。 str
我有这段代码来尝试打开一个 .json 文件并读取它: [Route("{unit}/{begindate}")] public string Get(string unit, string begi
主程序中的代码 controller.modelToFile("passwords/test.json"); controller.deJSONizeModel("passwords/test.jso
我在 header 中请求 gZip 响应,例如: request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip"); 在 webrespon
我在全息镜头上部署时遇到异常。我不知道为什么或如何解决它。它发生在下面的类中。 class JsonConverter { public Dictionary convertJsonToObj
上下文 - 我们的代码 我们在重定向 API Http GET 调用时遇到错误。我在 stackoverflow 上搜索了类似的问题,但它似乎不像我们的问题。 我们有一个简单的场景。我们的解决方案是作
我遵循了那里的教程,并且想出了这个...... 它是一种设备注册方法,使用 Microsoft.WindowsAzure.MobileServices.MobileServiceClient.Regi
正在尝试连接 JOliver's EventStore与 RavenDB并遇到障碍。我在 Raven 中创建了一个名为 RavenEventStore 的新数据库。 以下是我的线路; return W
我正在尝试制作一个 discord 机器人,但我在连接到 discord API 时遇到问题。我正在使用 visual studio community 2019。我使用 .net 核心控制台应用程序
我正在尝试用 C# 编写 AWS Lambda 函数。我有 AWS Toolkit for Visual Studio 2015。我使用 AWS Lambda 项目 (.Net Core) 创建了一个
反序列化命令时,我们遇到随机异常。我们有一个仅发送 API,可将消息放入队列中。尝试使用消息但失败。无论消息类型如何,它都会随机发生。有时后端可以反序列化消息。我们将 NServiceBus 设置为使
我正在尝试将一些日期插入到我的本地数据库中。我收到一个错误: {Newtonsoft.Json.JsonReaderException: Could not convert string to Dat
反序列化命令时,我们遇到随机异常。我们有一个仅发送 API,可将消息放入队列中。尝试使用消息但失败。无论消息类型如何,它都会随机发生。有时后端可以反序列化消息。我们将 NServiceBus 设置为使
我正在尝试将一些日期插入到我的本地数据库中。我收到一个错误: {Newtonsoft.Json.JsonReaderException: Could not convert string to Dat
我们已将 Newtonsoft.Json 从 10.0.3 升级到 11.0.1,之前可以运行的代码不再运行。 我们有以下 JSON: [{"mail-type":"registration","re
我在解析包含 JSON 的字符串时收到此异常: Newtonsoft.Json.JsonReaderException: Unterminated string. Expected delimiter
您好,我正在尝试从移动后端调用 lambda 函数。 我使用.Net Core生成了Lambda函数 public string FunctionHandler(string text,
我有以下字符串。我收到以下错误。你能告诉我哪里出了问题吗? Unexpected character encountered while parsing value: C. Path '', line
我正在运行下面的代码来故意抛出 JsonReaderException。它正确地给出了“无法将字符串转换为 bool 值:aaa。路径‘事件’,第 3 行,位置 17”的异常消息。 有什么方法可以直接
我是一名优秀的程序员,十分优秀!