gson无法使用GsonBuilder.setDateFormat解析(“yyyy-MM-dd'T'HH:mm:ss.SSSZ”) [英] gson fails to parse using GsonBuilder.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
问题描述
我从服务器获取这个字符串:
[
{
title:破坏你今天爱的人,
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日期startDateTime;
}
类型collectionType = new TypeToken< ArrayList< Offer>>(){} .getType();
mOffersList.addAll((Collection< ;? extends Offer>)gson.fromJson(result,collectionType));
但是当我将startDate定义为日期时
$ b $当我将startDate定义为一个字符串时
p>集合填写正确。
我想更改其日期格式。这就是为什么我更喜欢将它保存为Date对象。
我试过了
Gson gson = new GsonBuilder()。setDateFormat(yyyy-MM-dd'T'HH:mm:ss.SSSZ)。create;
但Gson未能将服务器的字符串解析为
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实现JsonDeserializer< Date> {
@覆盖
公开日期反序列化(JsonElement元件,类型ARG1,JsonDeserializationContext ARG2)抛出JsonParseException {
字符串日期= element.getAsString();
SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd'T'HH:mm:ss.SSS'Z');
format.setTimeZone(TimeZone.getTimeZone(GMT));
尝试{
return format.parse(date);
} catch(ParseException exp){
System.err.println(Failed to parse Date:,exp);
返回null;
}
}
}
然后注册上述解串器:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class,new DateDeserializer());
I get this string from the server:
[
{
"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"
}
]
and I try to parse it an object
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));
but when I define "startDate" as a Date
the collection I get back from gson is empty
When i define "startDate" as a String
the collection is filled correctly.
I want to change its date format. That's why I prefer saving it as a Date object.
I have tried
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create;
and yet Gson fails to parse the server's string into
Date startDateTime
. Nothing is added to the mOffersList
and it stays empty.
What am I doing wrong?
Only setting the required DateFormat is not sufficient.
You need to define an implementation of com.google.gson.JsonDeserializer. For ex.
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;
}
}
}
and then register the above deserializer:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
这篇关于gson无法使用GsonBuilder.setDateFormat解析(“yyyy-MM-dd'T'HH:mm:ss.SSSZ”)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!