遇到意外字符
本文关键字:字符 意外 遇到 | 更新日期: 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));