2016-04-27 3 views
0

Ich habe ein JSON vom Server in diesem Format zurückgegeben:Wie das .NET JsonResult DateTime Format mit Gson in Android deserialisieren?

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

Und in meinem POJO:

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

Und mein Gson Objekt:

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

Wenn ich wollte, diese analysieren JSON Ich erhalte diesen Fehler:

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

Was ist der richtige Weg, um JSON in Android mit Gson zu parsen?

+1

Wenn Sie können, dann würde ich die .NET Termine fix da diese Strings sind, wenn sie –

Antwort

1

Ich habe so etwas getan, Erstelle einen Date Serializer und registriere ihn im 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; 
     } 
    } 
} 

Registrierung mit Gson Builder

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

auch die Verwendung SerializedName Anmerkung für Felder longs sein könnte. – Krish

+0

scheint es, dass es keinen besseren Weg gibt :( –

Verwandte Themen