Настройте gson для сериализации типа календаря для веб-службы wcf - PullRequest
3 голосов
/ 21 июня 2011

У меня есть объект, который содержит тип Calendar, представляющий дату CreatedOn. Я получил адаптер для отображения миллисекунд, но я не уверен, как выводить информацию о часовом поясе, настроенную устройством.

WCF ожидает, что даты будут в следующем формате: "CreatedOn":"\/Date(1305003600000-0500)\/"

Это то, что у меня сейчас есть:

Gson gson = new GsonBuilder()
  .registerTypeAdapter(GregorianCalendar.class, new JsonSerializer<GregorianCalendar>() {

    public JsonElement serialize(GregorianCalendar date, Type type, JsonSerializationContext context) {
      return new JsonPrimitive("/Date(" + date.getTimeInMillis() + ")/");
    }

}).create();

Ответы [ 2 ]

0 голосов
/ 25 сентября 2013

Может быть, это можно сделать без специального сериализатора, но с помощью пользовательского установщика поля:

private String CreatedOn;

public void setCreateOn(Calendar date) { this.CreatedOn = "\\/Date(" + date.getTimeInMillis() + "-0000)\\/" ; }
0 голосов
/ 22 июня 2011

Закончилось следующим:

Gson gson = new GsonBuilder()
  .registerTypeAdapter(GregorianCalendar.class, new JsonSerializer<GregorianCalendar>() {
    public JsonElement serialize(GregorianCalendar date, Type type, JsonSerializationContext context) {
      return new JsonPrimitive("\\/Date(" + date.getTimeInMillis() + "-0000)\\/");
    }               
}).create();

Когда я добавляю свой объект в запрос HttpPost как json StringEntity, я исправляю экранированные обратные слеши:

String json = gson.toJson(data).replace("\\\\/", "\\/");

Я бывсе еще интересоваться «лучшим» способом достижения этого, если он существует ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...