Анализ ASP.NET MVC с датой использования библиотеки Jackson JSON в Java

Я разбираю JSON с сервера в своем приложении Android, используя библиотеку Jackson JSON. Однако запросы синтаксического анализа не срабатывают, когда я получаю DateTime, поскольку он находится в этом формате:

"/Date(1277931782420)/" 

Я знаю, что я должен сделать что-то вроде:

 ObjectMapper om = new ObjectMapper(); om.setDateFormat(new TicksSinceFormat()); 

Но я понятия не имею, могу ли я вообще использовать SimpleDateFormat (и какую строку формата использовать?), Или мне нужно написать собственный синтаксический анализатор DateFormat. Поэтому я был бы очень признателен, если бы кто-нибудь мог помочь с примером кода.

EDIT: ОК, см. Мой ответ для полного кода.

Это оказалось более жестким, чем я ожидал:

 public class TicksSinceFormat extends DateFormat { @Override public StringBuffer format(Date date, StringBuffer buffer, FieldPosition field) { long millis = date.getTime(); return new StringBuffer("/Date(" + millis + ")/"); } @Override public Date parse(String string, ParsePosition position) { int start = string.indexOf("(") + 1; int end = string.indexOf(")"); String ms = string.substring(start, end); Date date = new Date(Long.parseLong(ms)); position.setIndex(string.length() - 1); // MUST SET THIS return date; } @Override public Object clone() { return new TicksSinceFormat(); // MUST SET THIS } } 

Использование класса тогда чрезвычайно просто, просто выполните:

 ObjectMapper om = new ObjectMapper(); om.setDateFormat(new TicksSinceFormat()) 

Я полагаю, что это может быть лучше кодировано +, что мне нужно будет иметь дело с различиями, когда дело доходит до .NET Ticks VS Java ticks – но пока это будет сделано. Если у кого-то есть лучшее решение или более глубокое понимание упомянутых проблем, я поговорю позже – не стесняйтесь публиковать сообщения, и я буду отмечать ваш ответ как правильный, если это будет лучше.

EDIT: Как я объяснил в этом вопросе и ответе, я перешел на библиотеку ServiceStack.Text на сервере, и он возвращает другой формат ISO8601. Для этого формата я использую несколько разный синтаксический разбор (поскольку у Jackson есть проблема с анализом ISO8601, который содержит миллисекунды). Конечно, как и в случае с другим кодом, который я публикую, дайте мне знать, если у вас есть лучшая версия (просто отправьте код / ​​отредактируйте этот пост, а не прибегайте к философской риторике о том, как это сделать):

 @SuppressLint("SimpleDateFormat") public class JacksonSimpleDateFormat extends SimpleDateFormat { public JacksonSimpleDateFormat() { if (mParser == null) { mParser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); mParser.setTimeZone(TimeZone.getTimeZone("UTC")); } } @Override public StringBuffer format(Date date, StringBuffer buffer, FieldPosition field) { return mParser.format(date, buffer, field); } private static SimpleDateFormat mParser; @Override public Date parse(String string, ParsePosition position) { String str = string.split("\\.")[0]; Date date = null; try { date = mParser.parse(str); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } position.setIndex(string.length() - 1); return date; } @Override public Object clone() { return new JacksonSimpleDateFormat(); } } 

Возможно, я ошибаюсь в этом, так как я не очень продвинулся в разработке Android, но формат, который вы представили:

 "/Date(1277931782420)/" 

Появляется время эпохи Unix.

Если это так, вам не нужно / нужно использовать SimpleDateFormat . Вместо этого попробуйте создать Long из него и перейти к конструктору Date , учитывая, является ли это значением секунды или миллисекундой.

Вот сообщение StackOverflow, которое предоставляет код для этого: https://stackoverflow.com/a/535017/463196

Intereting Posts
Ошибка: (27) Идентификатор ресурса не найден для атрибута 'srcCompat' в пакете 'com.example.jaisonjoseph.newsclient' Я хочу обфускать AndroidManifest.xml с помощью Proguard Android 4.2.2 Устройство в автономном режиме Не удалось запустить активность ComponentInfo … java.lang.IllegalStateException: уже подключен Ограничение количества строк в функции ContentResolver.query () Android: цвет setselector для списка не работает Использование google Place picker в проекте android PreferenceActivity, проверяющая ввод пользователя и отображение сообщений об ошибках Получить информацию о значении браузера android и отобразить его на экране Использование Facebook app_link_hosts API Response – 403 Разрешения – Android На Android: как определить правильную анимацию, чтобы максимизировать один просмотр при одновременном минимизации двух других? Как остановить чрезмерное создание объектов на телефонах Samsung? Android In-App Billing: Security.java говорит: «Подтверждение подписи завершено» Как найти xpath в мобильном приложении с помощью appium Android – можно ли распознать?