В настоящее время у меня есть проблемы. Я использую C # с Json.NET. Проблема в том, что я всегда получаю:
{"При анализе значения обнаружен непредвиденный символ: e. Path '', строка 0, позиция 0."}
Итак, я использую Json.NET следующим образом. У меня есть класс, который нужно сохранить. Класс выглядит так:
public class stats
{
public string time { get; set; }
public string value { get; set; }
}
public class ViewerStatsFormat
{
public List<stats> viewerstats { get; set; }
public String version { get; set; }
public ViewerStatsFormat(bool chk)
{
this.viewerstats = new List<stats>();
}
}
Один объект этого класса будет заполнен и сохранен:
File.WriteAllText(tmpfile, JsonConvert.SerializeObject(current), Encoding.UTF8);
Часть сохранения работает нормально, файл существует и заполнен. После этого файл будет считан обратно в класс с помощью:
try
{
ViewerStatsFormat current = JsonConvert.DeserializeObject<ViewerStatsFormat>(tmpfile);
//otherstuff
}
catch(Exception ex)
{
//error loging stuff
}
Теперь в строке current = появляется исключение:
{"При анализе значения обнаружен непредвиденный символ: e. Path '', строка 0, позиция 0."}
Я не знаю, почему это происходит. Файл json следующий -> Щелкните меня по ссылке JSON
У кого-нибудь есть идеи?
c#
json
visual-studio-2013
json.net
zAfLu
источник
источник
Ответы:
Возможно, вы не передаете JSON
DeserializeObject
.Похоже, что из
File.WriteAllText(tmpfile,...
этого типаtmpfile
естьstring
путь к файлу.JsonConvert.DeserializeObject
принимает значение JSON, а не путь к файлу, поэтому ему не удается преобразовать что-то вроде@"c:\temp\fooo"
- что явно не JSON.источник
Я решил проблему с помощью следующих онлайн-инструментов:
Простой код:
источник
check if the Json structure
C #?У меня возникла такая же ошибка в моем решении Xamarin.Android.
Я убедился, что мой JSON правильный, и заметил, что ошибка появилась только тогда, когда я запустил приложение как сборку Release.
Оказалось, что компоновщик удалял библиотеку из Newtonsoft.JSON, что приводило к неправильному синтаксическому анализу JSON.
Я исправил ошибку, добавив Newtonsoft.Json в параметр Игнорировать сборки в конфигурации сборки Android (снимок экрана ниже)
Код разбора JSON
Скриншот Visual Studio для Mac
Скриншот Visual Studio
источник
Я также столкнулся с этой ошибкой для действия веб-API (.Net Core 3.0), которое было привязано к a,
string
а не кobject
илиJObject
. JSON был правильным, но связыватель попытался получить строку из структуры JSON и потерпел неудачу.Итак, вместо:
Мне пришлось использовать более конкретный:
источник
В моем случае файл, содержащий строку JSON, имел спецификацию . Как только я удалил спецификацию, проблема была решена.
источник
Эта проблема связана с отметкой порядка байтов в файле JSON. Файл JSON при сохранении не кодируется как данные кодировки UTF8. С помощью
File.ReadAllText(pathFile)
исправьте эту проблему.Когда мы работаем с данными Byte и преобразуем их в строку, а затем переходим к JsonConvert.DeserializeObject, мы можем использовать кодировку UTF32 для получения строки.
byte[] docBytes = File.ReadAllBytes(filePath);
string jsonString = Encoding.UTF32.GetString(docBytes);
источник
У меня была такая же проблема с webapi в ядре ASP.NET, в моем случае это было потому, что моему приложению нужна аутентификация, затем он назначает аннотацию,
[AllowAnonymous]
и это сработало.источник
Предположим, это ваш json
если вы снова хотите десериализовать место проведения, измените json, как показано ниже
затем попробуйте десериализовать соответствующий класс, взяв значение места
источник
В моем сценарии у меня было немного другое сообщение, где линия и позиция не были нулевыми.
Это был главный ответ Google на цитируемое мною сообщение.
Это произошло потому, что я вызвал программу из командной строки Windows, передав JSON в качестве параметра.
Когда я просмотрел аргументы в своей программе, все двойные кавычки были удалены. Вы должны их воссоздать.
Я отправил решение здесь . Хотя его, вероятно, можно улучшить с помощью Regex.
источник
У меня была аналогичная ошибка, и я подумал, что отвечу, если у кого-то будет что-то подобное. Я перебирал каталог файлов json и десериализовал их, но получал ту же ошибку.
Проблема заключалась в том, что он также пытался захватить скрытые файлы. Убедитесь, что вы передаете файл в формате .json. Я предполагаю, что он также будет обрабатывать текст. Надеюсь это поможет.
источник
В моем случае я получал сообщение об ошибке JsonConvert.PopulateObject () . Мой запрос возвращал JSON, заключенный в дополнительную пару скобок «[]», в результате чего мой результат представлял собой массив из одного объекта, а не просто объект. Вот что я сделал, чтобы попасть в эти скобки (только для этого типа модели):
источник
Если вы используете загрузку данных по URL-адресу ... возможно, потребуется использовать
источник
Убедитесь, что модель, которую вы поделили между клиентом и сервером, одинакова. иногда вы получаете эту ошибку, если не обновляли версию Api, и она возвращает обновленную модель, но у вас все еще есть старая. Иногда вы получаете то, что вы сериализуете / десериализуете, не является действительным JSON.
источник
Я столкнулся с аналогичным сообщением об ошибке в формах Xamarin при отправке запроса в webApi на получение токена,
источник
Когда я столкнулся с подобной проблемой, я установил его, заменив
&mode=xml
на&mode=json
в запросе.источник