Gson Serialisierung von Feld Datum in MS WCF kompatible Form
-
28-09-2019 - |
Frage
ich Zugriff auf einen Web-Service in einem Verfahren POST. Ich brauche eine JSON-Objekt serialisiert an den Server zu senden. In meiner Android-Klasse habe ich einige String-Felder und ein Datumsfeld. Das Datumsfeld wird wie folgt serialisiert:
.... TouchDateTime":"Oct 6, 2010 5:55:29 PM"}"
aber mit dem Web-Dienst kompatibel sein muss ich es haben wie:
"TouchDateTime":"\/Date(928138800000+0300)\/"
ich einen interessanten Artikel über Deserialisierung in hier: http : //benjii.me/2010/04/deserializing-json-in-android-using-gson/ glaube ich, so etwas zu tun. Könnten Sie mir eine helfende Hand geben?
Lösung
Falls jemand es braucht, ist hier, wie ich es tat. 1. Erstellen Sie eine neue Klasse DateSerializer und setzen in es:
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() + ")/");
}
}
Und hier ist, wie ich es verwenden:
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;
}
Andere Tipps
Wenn jemand sowohl die Serialisierung und Deserialisierung braucht, habe ich eine GsonHelper darauf vorbereitet: Wie Parse .net Datetime als jSON-String in Java Date-Objekt empfangen