![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
uwannadie |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: нет Всего: 1 |
есть JSON данные, в которых содержатся строки в формате
десериализация производится с помощью JSON.Net имеется класс под этот JSON
при попытке десериализации вылетает исключение:
если заменить long на string получается то же самое. вопрос: как это дело победить? Это сообщение отредактировал(а) uwannadie - 15.6.2013, 19:50 --------------------
|
||||||
|
|||||||
Fobos |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 9.2.2008 Где: Москва Репутация: нет Всего: нет |
Вопрос в лоб, а Вы пробовали how to example на сайте проекта? http://james.newtonking.com/projects/json-net.aspx я думаю это было бы хорошей отправной точкой.
|
|||
|
||||
uwannadie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: нет Всего: 1 |
их поиск меня наверное уже ненавидит
![]() --------------------
|
|||
|
||||
Fobos |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 9.2.2008 Где: Москва Репутация: нет Всего: нет |
Нет, постойте, чудес не бывает. Если Вы вставляете Вашу строку "arenaUniqueID ": 123456789000000L в их пример она что, тоже падает?
|
|||
|
||||
uwannadie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: нет Всего: 1 |
ну как минимум проблемная строка под их пример не подходит (т.к. там свой класс)
--------------------
|
|||
|
||||
Fobos |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 9.2.2008 Где: Москва Репутация: нет Всего: нет |
да не подходит, верно подмечено, но по аналогии переделать не получается? Я так понимаю Вы просто что-то напутали. Возьмите их пример и начните медленно переводить к Вашему проекту, на каждой итерации проверяйте работоспособность - проблема сразу найдется.
|
|||
|
||||
uwannadie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: нет Всего: 1 |
да я знаю в чем проблема - парсер не понимает формат, которым описывается long (1234567890L) в с\c++ и пытается его привести к Int64 (сами данные формировались в JSON программой, написанной в связке c++\python)
но вот как побороть эту проблему без использования костылей а-ля найти все вхождения этого и удалить, я не в курсе ![]() Это сообщение отредактировал(а) uwannadie - 16.6.2013, 00:36 --------------------
|
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
меняется лонг на стринг только в классе или в json строке тоже? беглое изучение справки на сайте тут говорит, что можно попробовать следующее: 1. использовать атрибуты, типа JsonProoertyAttribute или JsonConverterAttribute 2. использовать свой конвертер, т.е. написать наследника от CustomCreationConverter<>, и передавать его вместе с данными которые надо десериализовывать в десериализатор. примерами они конечно не очень сильно разбрасываются, но если посидеть, то можно вкурить. |
|||
|
||||
uwannadie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: нет Всего: 1 |
в классе, но толку от этого ноль, т.к. данные все равно в понимании парсера - число ибо без кавычек. аттрибуты ставил, но результат аналогичный. сейчас как раз курю над конвертерами --------------------
|
|||
|
||||
uwannadie |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: нет Всего: 1 |
прикрутил свой конвертер - результат тот же.
причем сам конвертер оперирует нормально и отрабатывает без ошибок, но вот десериализация фейлится ;( код конвертера (мб все же тут надуплил, хотя там все просто)
и сам класс
сам JSON с вырезанными данными (ибо их там 130кб)
--------------------
|
||||||
|
|||||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
тут бы наверное надо прочитать собственно значение, и попытаться его распарсить. типа long.Parse() или выяснить можно ли это сделать. поставь тут брекпоинт и посмотри что тут вообще происходит. |
|||
|
||||
uwannadie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: нет Всего: 1 |
там спокойно извлекается значение, причем вполне нормально.
исключение вызывается сразу после выхода из этой функции. пробовал втыкать туда try...catch, но функция отрабатывает успешно п.с. возможно проблема в том, что в JonToken.cs (http://json.codeplex.com/SourceControl/latest#128149) все целочисленные типы фактически рассматриваются как integer? Это сообщение отредактировал(а) uwannadie - 16.6.2013, 19:42 --------------------
|
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
может быть все что угодно )))
как сейчас выглядит метод? попробуй вернуть лонг(без приведения к object или ToString()). |
|||
|
||||
uwannadie |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: нет Всего: 1 |
без приведения к object не скомпилится ибо
в http://json.codeplex.com/SourceControl/latest#128133 если конвертер привести к
ну и соответственно поменять в классе, то все равно вываливается ошибка при десериализации --------------------
|
||||||
|
|||||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
я не очень уверен, но мне почему то кажется что буква L это не совсем вписывается в json формат. json это ж как бы текст, и при парсинге оно очень уделяется внимания этому, и текст без этой буквы уверенно конвертируется в число, но букву эту он почему то всегда считает не числом, а непонятно чем.
Добавлено через 54 секунды думаю поможет реализация своего парсинга поможет разрулить эту ситуацию... |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |