我从服务器获取以下字符串:
[ { "title":"spoil the ones u love today", "startDateTime":"2014-08-10T20:10:36.7158Z" }, { "title":"home made patisserie", "startDateTime":"2014-08-10T20:08:45.0218Z" } ]
我尝试将其解析为一个对象
public class Offer implements Serializable { public String title; public Date startDateTime; } Type collectionType = new TypeToken<ArrayList<Offer>>() {}.getType(); mOffersList.addAll((Collection<? extends Offer>) gson.fromJson(result, collectionType));
但是当我定义“ startDate”作为日期时
我从gson回来的收藏集是空的
当我将“ startDate”定义为字符串时
集合已正确填充。
我想更改其日期格式。这就是为什么我更喜欢将其保存为Date对象。
我努力了
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM- dd'T'HH:mm:ss.SSSZ").create;
但是Gson无法将服务器的字符串解析为
Date startDateTime。没有添加任何内容,mOffersList并且保持空白。
Date startDateTime
mOffersList
我究竟做错了什么?
仅设置所需的DateFormat是不够的。
您需要定义 com.google.gson.JsonDeserializer 的实现。对于前。
import java.lang.reflect.Type; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; 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 date = element.getAsString(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); format.setTimeZone(TimeZone.getTimeZone("GMT")); try { return format.parse(date); } catch (ParseException exp) { System.err.println("Failed to parse Date:", exp); return null; } } }
然后注册上面的反序列化器:
GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());