How to parse .net DateTime received as json string into java's Date object

后端 未结 5 2198
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-09 22:57

I\'m receiving .NET\'s DateTime object as json string through my asmx webservice and trying to parse it with help of gson library. But seems like there\'s no su

5条回答
  •  无人及你
    2020-12-09 23:55

    I've implemented a GsonHelper, which helps deserializing and serializing .NET DateTime format from JSON using GSON. Usage:

    // How to get DataClass object from JSON string
    Gson gson = new GsonHelper().getGson();
    DataClass DATA = gson.fromJson(YOUR_JSON, DataClass.class);
    
    // How to get JSON string from your JSON data
    Gson gson = new GsonHelper().getGson();
    String JSON = gson.toJson(DATA);
    

    This is the helper class:

    public class GsonHelper 
    {   
        public Gson getGson()
        {
            GsonBuilder builder = new GsonBuilder();
            builder.registerTypeAdapter(Date.class, new DotNetDateDeserializer());
            builder.registerTypeAdapter(Date.class, new DotNetDateSerializer());
            return builder.create();
        }
    
        public class DotNetDateDeserializer implements JsonDeserializer 
        {
            @Override
            public Date deserialize(JsonElement json, Type typfOfT, JsonDeserializationContext context)
            {
                try
                {
                    String dateStr = json.getAsString();
                    if (dateStr != null) dateStr = dateStr.replace("/Date(", "");
                    if (dateStr != null) dateStr = dateStr.replace("+0000)/", "");
                    if (dateStr != null) dateStr = dateStr.replace(")/", "");
                    long time = Long.parseLong(dateStr);
                    return new Date(time);
                }
                catch (Exception ex)
                {
                    ex.printStackTrace();
                    return null;
                }
    
            }
        }
    
        public class DotNetDateSerializer implements JsonSerializer 
        {
            @Override
            public JsonElement serialize(Date date, Type typfOfT, JsonSerializationContext context)
            {
                if (date == null)
                    return null;
    
                String dateStr = "/Date(" + date.getTime() + ")/";
                return new JsonPrimitive(dateStr);
            }
        }
    

    Note: works for two formats: /Date(1362853251000)/ and /Date(1362853251000+0000)/. Helper have to be tuned for other formats with time defined.

提交回复
热议问题