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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top