遇到意外字符

本文关键字:字符 意外 遇到 | 更新日期: 2023-09-27 18:10:51

我有一个使用angular和c#的web项目。
在c#控制器中,我想读取用于测试的本地json文件的内容。

这是我运行从我的工作目录读取JSON的代码。

string path = HttpContext.Current.Server.MapPath("~/testing/testData.json");
JObject jsonData = JObject.Parse(path);
string jsonString = jsonData.ToString();
List<orResult> result = JsonConvert.DeserializeObject<List<orResult>>(jsonString);
return result;

JSON可以在这里看到。Json

当我运行应用程序时,我得到以下错误:

类型为'Newtonsoft.Json '的异常。JsonReaderException'发生在Newtonsoft.Json.dll,但在用户代码中未处理

附加信息:解析时遇到意外字符"路径",行号0,位置0.

当我悬停在path变量上时,它指向正确的位置。如果我将path变量复制并粘贴到浏览器中,就会看到JSON。错误是与解析数据或其他东西…我不知道。需要帮助!

我看过Stack上的其他解决方案,但没有一个能解决我的问题。

遇到意外字符

JObject.Parse()期望的是实际的JSON内容(字符串),而不是路径。

你的JSON实际上是一个数组,所以你可以使用JArray.Parse()代替。此外,将JSON字符串转换为JObject,然后返回ToString(),实际上没有在这里添加任何"值"。


应该可以了。

string json = File.ReadAllText(HttpContext.Current.Server.MapPath("~/testing/testData.json"));
var result = JsonConvert.DeserializeObject<List<orResult>>(json);

您正试图反序列化MapPath返回的翻译路径 ("c:'whatever'…'testing'testData.json"),即不是文件的内容

试试这样:

JObject jsonData = JObject.Parse(File.ReadAllText(path));

…但又一次,没有必要使用Parse(),因为你不需要JObject。直接反序列化到List<orResult>:

var result = JsonConvert.DeserializeObject<List<orResult>>(File.ReadAllText(path));