Код: Выделить всё
public class MyGsonWrapper
{
public static Gson getMyGson()
{
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new GsonDateSerializer());
gsonBuilder.registerTypeAdapter(Date.class, new GsonDateDeserializer());
gsonBuilder.registerTypeAdapter(byte[].class, new GsonByteArraySerializer());
return gsonBuilder.create();
}
static class GsonDateDeserializer implements JsonDeserializer<Date>
{
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
String s = json.getAsString().replace("/Date(", "").replace(")/", "");
if (s.equals("")) return null;
boolean isDateBefore1970 = false;
if (s.length() > 0 && s.indexOf("-") == 0)
{
isDateBefore1970 = true;
s = s.substring(1, s.length());
}
long offset = 0;
if (s.length() > 5 && (s.indexOf("-") == s.length()-5 || s.indexOf("+") == s.length()-5))
{
offset = Long.valueOf(s.substring(s.length()-4, s.length()-2))*60 + Long.valueOf(s.substring(s.length()-2, s.length()));
if (s.indexOf("-") == s.length()-5) offset = -offset;
s = s.substring(0, s.length()-5);
}
if (isDateBefore1970)
return new Date(-Long.valueOf(s) - offset * 60 * 1000);
else
return new Date(Long.valueOf(s) + offset * 60 * 1000);
}
}
static class GsonDateSerializer implements JsonSerializer<Date>
{
public JsonElement serialize(Date date, Type typeOfT, JsonSerializationContext context)
{
return new JsonPrimitive("/Date(" + date.getTime() + ")/");
}
}
static class GsonByteArraySerializer implements JsonSerializer<byte[]>
{
public JsonElement serialize(byte[] data, Type typeOfT, JsonSerializationContext context)
{
return new JsonPrimitive(Base64.encodeBytes(data));
}
}
}
Код: Выделить всё
public class MyJsonWrapper {
public static ObjectMapper getMyJson()
{
ObjectMapper mapper = new ObjectMapper(new SmileFactory());
SimpleModule module = new SimpleModule("MyModule", new Version(1, 0, 0, null));
module.addSerializer(Date.class, new JsonDateSerializer());
module.addDeserializer(Date.class, new JsonDateDeserializer());
module.addSerializer(byte[].class, new JsonByteArraySerializer());
mapper.registerModule(module);
return mapper;
}
static class JsonDateDeserializer implements JsonDeserializer<Date>
{
public Date deserializeWithType(JsonParser jp, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws java.io.IOException, JsonProcessingException
{
}
static class JsonDateSerializer implements JsonSerializer<Date>
{
public JsonParser serialize(Date date, Type typeOfT, Serializers context)
{
return new JsonPrimitive("/Date(" + date.getTime() + ")/");
}
}
static class JsonByteArraySerializer implements JsonSerializer<byte[]>
{
public JsonParser serialize(byte[] data, Type typeOfT, Serializers context)
{
return new JsonPrimitive(Base64.encodeBytes(data));
}
}
MyGsonWrapper.getMyGson().toJson(MyObject) MyGsonWrapper.getMyGson().fromJson(response.Body, MyObject[].class);
Может эта обвертка и не нужна совсем, может на прямую обращаться к функциям JACKSON? Если она все таки нужна, подскажите как изменить. Если не нужна, то через какие какие именно функции из библиотеки осуществлять сериализация и десериализация и как к ним обращаться...