我需要创建一个自定义反序列化程序,以便我能够正确地反序列化我以这种格式收到的日期:2011-10-19T23:30:00-04:00
。我的Date对象是许多字段之一,包含我正在反序列化的Object的许多嵌套类中的一个。除了Date之外,一切正常。我的班级看起来像这样:
public class OfferContainer{
public Offer offer;
public OfferContainer(){}
@Override
public String toString()
{
return this.getID() + offer.toString();
}
public String getDescription() {
return offer.description;
}
public String getBusinessName() {
return offer.business.name;
}
public class Offer
{
public Category category;
public String description;
public String discount;
public Date expiration;
public Date published;
public String rescinded_at;
public String title;
public String hook;
public Date valid_from;
public Date valid_to;
public String id;
public Business business;
public Location location;
public String image_270x155;
@Override
public String toString()
{
return String.format(
"[Offer: category=%1$s, description=%2$s, discount=%3$s, expiration=%4$s, published=%5$s, rescinded_at=%6$s, title=%7$s, valid_from=%8$s, valid_to=%9$s, id=%10$s, business=%11$s, location=%12$s]",
category, description, discount, expiration, published, rescinded_at, title, valid_from, valid_to, id,
business, location);
}
}
public enum Category
{
Salon, Spa, Restaurant, Other
}
public class Business
{
public String name;
public String phone;
public Address address;
@Override
public String toString()
{
return String.format(
"[Business: name=%1$s, phone=%2$s, address=%3$s]",
name, phone, address);
}
}
public class Address
{
public String address_1;
public String address_2;
public String city;
public String cross_streets;
public String state;
public String zip;
@Override
public String toString()
{
return String.format(
"[Address: address_1=%1$s, address_2=%2$s, city=%3$s, cross_streets=%4$s, state=%5$s, zip=%6$s]",
address_1, address_2, city, cross_streets, state, zip);
}
}
public class Location {
public double latitude;
public double longitude;
public String toString() {
return String.format("[Location: longitude=%1$s, latitude=%2$s]", longitude, latitude);
}
}
}
如何在此方案中使用registerTypeAdapter
,如何为此正确实现自定义反序列化?
提前致谢!
另外,如果重要的话,这就是我实际上如何得到我的POJO:
OfferContainer[] offers = gson.fromJson(json, OfferContainer[].class);
这是JSON:
{
"offer":{
"category":"Salon",
"description":"Use this offer now to enjoy this great Salon at a 20% discount. ",
"discount":"20",
"expiration":"2011-04-08T02:30:00Z",
"published":"2011-04-07T12:00:33Z",
"rescinded_at":null,
"title":"20% off at Jun Hair Salon",
"valid_from":"2011-04-07T12:00:31Z",
"valid_to":"2011-04-08T02:00:00Z",
"id":"JUN_HAIR_1302177631",
"business":{
"name":"Jun Hair Salon",
"phone":"2126192989",
"address":{
"address_1":"12 Mott St",
"address_2":null,
"city":"New York",
"cross_streets":"Chatham Sq & Worth St",
"state":"NY",
"zip":"10013"
}
},
"location":{
"latitude":"40.714021",
"longitude":"-73.998663"
},
"distance":619.8162766744034,
"draws":[
"Hair Cut",
"Blow Dry",
"Blow Dry Treatment"
],
"claim_link":"http://m-s.com/offers/JUN_HAIR_1302177631?app_id=SavIMg",
"mobile_claim_link":"http://m-s.com/offers/JUN_HAIR_1302177631?app_id=SavIMg"
}
}
答案 0 :(得分:3)
您需要实现JSONDeserializer<OfferContainer>
,然后覆盖deserialize
方法来实现此目的。看看这个问题GSON deserializing key-value to custom object
您也可以尝试在GsonBuilder
中设置日期格式
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HHmmss.SSS'Z'")
.create();
OfferContainer [] offers = gson.fromJson(json, OfferContainer[].class);