Newtonsoft.Json.JsonReaderException: неожиданный символ, встречающийся при синтаксическом анализе значения: S. Path «, строка 0, позиция 0. Только при определенной сборке

#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