How to deserialise .NET JsonResult DateTime format with Gson in Android?

孤街醉人 提交于 2020-01-07 00:07:09

问题


I have a JSON returned from server in this format:

{
    "StartDate": "/Date(1451593800000)/",
    "EndDate": "/Date(1483216200000)/"
}

And in my POJO:

public class Data {
    java.util.Date startDate;
    java.util.Date endDate;
}

And my Gson object:

private final Gson gson =  new GsonBuilder()
    .serializeNulls()
    .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
    .create();

When I wanted to parse this JSON I get this error:

Unparseable date: "/Date(1483216200000)/" (at offset 0)

What is the right way to parse such JSON in Android with Gson?


回答1:


I have done some thing like this, Create a Date Serializer and register it to the GsonBuilder.

import java.lang.reflect.Type;
import java.util.Date;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

public class DateDeserializer implements JsonDeserializer<Date> {

    @Override
    public Date deserialize(JsonElement element, Type arg1,
            JsonDeserializationContext arg2) throws JsonParseException {
        String data = element.getAsString();
        data = data.replace("/Date(", "");
        data = data.replace(")/", "");
        try {
            return new Date(Long.parseLong(data));
        } catch (Exception e) {
            System.out.println("Failed to parse Date due to:");
            return null;
        }
    }
}

Registering with Gson Builder

Gson gson = new GsonBuilder().serializeNulls()
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .registerTypeAdapter(Date.class, new DateDeserializer()).create();


来源:https://stackoverflow.com/questions/36902369/how-to-deserialise-net-jsonresult-datetime-format-with-gson-in-android

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!