#c# #json #.net-core #json.net
#c# #json #.net-ядро #json.net
Вопрос:
Я работаю над переносом discord.net бот, который я создал для Raspberry Pi, и я получаю сообщение об ошибке, когда я создаю и запускаю его на pi, которое не отображается, когда я создаю и запускаю его где-либо еще.
Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: S. Path '', line 0, position 0.
Это ошибка, которую я получаю при запуске проекта (данные токена для бота хранятся в файлах json), они считываются полностью нормально, когда я запускаю проект из Visual Studio на своем ПК, но когда я создаю проект на PI и запускаю его, я получаю эту ошибку.
Я нашел страницу stackoverflow с этой ошибкой, и ни одно из решений, похоже, не решает мою проблему.
- Я запустил свои данные json через веб-сайт проверки, и он проверяет
- Я видел, как в одном сообщении говорилось о том, что это может быть проблема с кодировкой UTF, поэтому я попробовал исправить, где я передаю текст в кодировке UTF-8, и та же ошибка. Затем я попробовал использовать UTF-32, и это приводит к появлению ошибки на моем компьютере и на PI!
- У меня такое чувство, что это как-то связано с его кодировкой, но я действительно застрял здесь, и я не могу найти больше форумов, обсуждающих эту проблему. Любые указания или идеи приветствуются!
Это код, который выдает ошибку, JsonFromPath
возвращает необработанные данные json из файла, DataFromJson
десериализует его, и именно здесь выдается ошибка.
public string JsonFromPath(string path)
{
try
{
string resu<
using (var reader = new StreamReader(path))
{
result = reader.ReadToEnd();
}
return resu<
}
catch(Exception ex) { return ex.ToString(); }
}
public T DataFromJson(string json)
{
return JsonConvert.DeserializeObject<T>(json);
}
Комментарии:
1. Вам необходимо включить json в свой вопрос.
2. Мне кажется вероятным, что ваш
JsonFromPath
метод обнаруживает ошибку и возвращает исключение, а не JSON. Похоже, нет особого смысла перехватывать ошибку чтения, если вы не собираетесь обрабатывать ее таким образом, чтобы ваше приложение продолжало вести себя предсказуемым образом. Было бы лучше просто позволить ему всплыть.
Ответ №1:
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);
}
}
Я изменил код на это, и по какой-то причине он работает сейчас smh