serializzazione GSON di campo data in forma compatibile con MS WCF
-
28-09-2019 - |
Domanda
I accedere a un servizio Web in un metodo POST. Ho bisogno di inviare al server un JSON serializzato oggetto. Nella mia classe Android ho alcuni campi stringa e un campo Data. Questo campo Data viene serializzato in questo modo:
.... TouchDateTime":"Oct 6, 2010 5:55:29 PM"}"
ma per essere compatibile con il servizio web ho bisogno di averlo come:
"TouchDateTime":"\/Date(928138800000+0300)\/"
Ho trovato un interessante articolo su deserializzazione qui: http : //benjii.me/2010/04/deserializing-json-in-android-using-gson/ penso che ho bisogno di fare qualcosa di simile. Potreste darmi una mano?
Soluzione
Nel caso in cui nessuno ha bisogno, ecco come ho fatto. 1. Creare una nuova classe DateSerializer e mettere in esso:
import java.lang.reflect.Type;
import java.util.Date;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
public class DateSerializer implements JsonSerializer<Object>
{
public JsonElement serialize(Date date, Type typeOfT, JsonSerializationContext context)
{
return new JsonPrimitive("/Date(" + date.getTime() + ")/");
}
public JsonElement serialize(Object arg0, Type arg1,
JsonSerializationContext arg2) {
Date date = (Date) arg0;
return new JsonPrimitive("/Date(" + date.getTime() + ")/");
}
}
Ed ecco come lo uso:
public static JSONObject Object(Object o){
try {
GsonBuilder gsonb = new GsonBuilder();
DateSerializer ds = new DateSerializer();
gsonb.registerTypeAdapter(Date.class, ds);
Gson gson = gsonb.create();
return new JSONObject(gson.toJson(o));
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
Altri suggerimenti
Se qualcuno ha bisogno sia di serializzazione e deserializzazione, ho preparato un GsonHelper per esso: Come parse .net DateTime ricevuto come stringa jSON in Data oggetto di java