c# - Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:S.路径'',第 0 行,位置 0。仅在某些构建上
问题描述
我正在将我制作的 discord.net 机器人移植到树莓派上,当我在 pi 上构建和运行它时遇到错误,而当我在其他任何地方构建和运行它时却没有出现。
Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: S. Path '', line 0, position 0.
这是我在运行项目时遇到的错误(机器人的令牌数据存储在 json 文件中)当我在我的 PC 上从 Visual Studio 中运行项目时,它们被完全读取,但是当我在 PI 上构建项目时并运行它我得到这个错误。
我在这个错误上找到了一个 stackoverflow 页面,但似乎没有一个解决方案能解决我的问题。
我通过一个验证网站运行了我的 json 数据,它签出了
我看到一篇帖子说它可能是一个 UTF 编码问题,所以我尝试了一个修复,我在其中传递了 UTF-8 编码的文本,并且出现了同样的错误。然后我尝试使用 UTF-32,这使得错误出现在我的 PC 和 PI 上!
我有一种感觉,它与它的编码有关,但我真的被困在这里,我再也找不到讨论这个问题的论坛了。任何指针或想法表示赞赏!
这是抛出错误的代码,JsonFromPath
从文件返回原始 json 数据,DataFromJson
是反序列化它的代码,这就是抛出错误的地方。
public string JsonFromPath(string path)
{
try
{
string result;
using (var reader = new StreamReader(path))
{
result = reader.ReadToEnd();
}
return result;
}
catch(Exception ex) { return ex.ToString(); }
}
public T DataFromJson(string json)
{
return JsonConvert.DeserializeObject<T>(json);
}
解决方案
public T DataFromPath(string path)
{
try
{
string rawJson;
using (var reader = new StreamReader(path))
{
rawJson = reader.ReadToEnd();
}
return JsonConvert.DeserializeObject<T>(rawJson);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return default(T);
}
}
我把代码改成了这个,由于某种原因它现在可以工作了
推荐阅读
- javascript - 需要帮助使用具有两个功能的 await 或 Promise
- java - 为什么对象的实例会破坏受保护的逻辑?
- javascript - 如何在使用 aurelia 时使用值转换器或任何其他方法绑定和显示绑定的值
- html - 如何修复环绕屏幕而不是安装的列
- jquery - Jquery datatable PageLength 在选择列表更改时不做任何事情
- python - 从 Chatter 记录中拆分机器人记录
- android - 如何从回收站视图和领域数据库中删除特定项目?
- python-3.x - 如何获取二维字符串列表并返回字典?每行的第一个元素是键
- reactjs - 带有 Formik 内部输入的自定义更改处理程序
- twincat - TwinCat issue : state change to op mode failed master state preop is insufficient