我正在尝试反序列化
类型的对象 ArrayList<Pair<OuterData, ArrayList<InnerData>>>
其中OuterData
和InnerData
是使用gson的POJO。
我努力了但是我无法做到。我正在
java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap 无法施展 v2015.oasis.pilani.bits.com.home.events.inner.InnerData
每当我尝试new Gson().fromJson(json, type);
其中type是使用
从TypeToken获得的new TypeToken<ArrayList<Pair<OuterData, ArrayList<InnerData>>>>(){}.getType()
我虽然使用Type会解决我的问题,因为我最初想要使用它,但它并没有。任何帮助表示赞赏。
编辑:以下是OuterData
和InnerData
类(在kotlin中)
data class InnerData(val name: String,
val category: String,
val categoryIcon: Int,
val description: String,
val rules: String,
val time: String,
val date: String,
val venue: String,
val notifyState: Boolean,
val notifyTime: Int,
val favouriteState: Boolean)
data class OuterData(val heading: String, val color: Int)
我只使用gson来序列化数据。因此反序列化使用与使用gson序列化相同的json。
Edit2:序列化的JSON数据:这是使用gson
的输出序列化[
{
"first": {
"color": -65281,
"heading": "October 01"
},
"second": [
{
"category": "",
"categoryIcon": 17301533,
"date": "",
"description": "sfd",
"favouriteState": false,
"name": "sdfds",
"notifyState": false,
"notifyTime": 0,
"rules": "",
"time": "",
"venue": ""
}
]
},
{
"first": {
"color": -65281,
"heading": "November 01"
},
"second": [
{
"category": "",
"categoryIcon": 17301533,
"date": "djfkd",
"description": "klddjflk",
"favouriteState": false,
"name": "jkl",
"notifyState": false,
"notifyTime": 0,
"rules": "",
"time": "sdkjfk",
"venue": "ldkfjf"
}
]
},
{
"first": {
"color": -16175867,
"heading": "October 31"
},
"second": [
{
"category": "Event Category",
"categoryIcon": 17301533,
"date": "31-10-2017",
"description": "Event Description",
"favouriteState": false,
"name": "Event name",
"notifyState": false,
"notifyTime": 0,
"rules": "Events Rules",
"time": "13:55",
"venue": "Event Venue"
},
{
"category": "",
"categoryIcon": 17301533,
"date": "",
"description": "",
"favouriteState": false,
"name": "dsf",
"notifyState": false,
"notifyTime": 0,
"rules": "",
"time": "",
"venue": ""
},
{
"category": "",
"categoryIcon": 17301533,
"date": "",
"description": "",
"favouriteState": false,
"name": "",
"notifyState": false,
"notifyTime": 0,
"rules": "",
"time": "",
"venue": ""
},
{
"category": "",
"categoryIcon": 17301533,
"date": "",
"description": "",
"favouriteState": false,
"name": "",
"notifyState": false,
"notifyTime": 0,
"rules": "",
"time": "",
"venue": ""
},
{
"category": "",
"categoryIcon": 17301533,
"date": "",
"description": "",
"favouriteState": false,
"name": "",
"notifyState": false,
"notifyTime": 0,
"rules": "",
"time": "",
"venue": ""
},
{
"category": "",
"categoryIcon": 17301533,
"date": "",
"description": "",
"favouriteState": false,
"name": "",
"notifyState": false,
"notifyTime": 0,
"rules": "",
"time": "",
"venue": ""
},
{
"category": "",
"categoryIcon": 17301533,
"date": "",
"description": "",
"favouriteState": false,
"name": "",
"notifyState": false,
"notifyTime": 0,
"rules": "",
"time": "",
"venue": ""
},
{
"category": "",
"categoryIcon": 17301533,
"date": "",
"description": "",
"favouriteState": false,
"name": "",
"notifyState": false,
"notifyTime": 0,
"rules": "",
"time": "",
"venue": ""
},
{
"category": "",
"categoryIcon": 17301533,
"date": "",
"description": "",
"favouriteState": false,
"name": "",
"notifyState": false,
"notifyTime": 0,
"rules": "",
"time": "",
"venue": ""
}
]
}]
答案 0 :(得分:0)
我尝试了你的代码并且有效:
"use strict";
window.onload = function(){
var o = {x:1};
//Make "x" non-configurable
Object.defineProperty(o, "x", {configurable: false});
//Seal "o";
Object.seal(o);
console.log(Object.getOwnPropertyDescriptor(o, "x"));
//outputs => Object { value: 1, writable: true, enumerable: true, configurable: false }
console.log(Object.isSealed(o));
//outputs => true
Object.defineProperty(o, "x", {writable: false}); //this doesn't cause any errors.
console.log(Object.getOwnPropertyDescriptor(o, "x"));
//outputs => Object { value: 1, writable: false, enumerable: true, configurable: false }
}
输出结果为:
import com.google.common.base.Charsets;
import com.google.common.io.Resources;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
public class App {
public static void main(String[] args) throws Exception {
Gson gson = new Gson();
final Type type = new TypeToken<List<Pair<OuterData, List<InnerData>>>>() {}.getType();
final List<Pair<OuterData, List<InnerData>>> o = new Gson().fromJson(Resources.toString(Resources.getResource("foo.json"), Charsets.UTF_8), type);
System.out.println(gson.toJson(o));
System.out.println(o.get(0).getFirst().getColor());
}
static class Pair<F, S> {
F first;
S second;
public F getFirst() {
return first;
}
public void setFirst(F first) {
this.first = first;
}
public S getSecond() {
return second;
}
public void setSecond(S second) {
this.second = second;
}
}
static class OuterData {
String heading;
Integer color;
public String getHeading() {
return heading;
}
public void setHeading(String heading) {
this.heading = heading;
}
public Integer getColor() {
return color;
}
public void setColor(Integer color) {
this.color = color;
}
}
static class InnerData {
String name;
String category;
Integer categoryIcon;
String description;
String rules;
String time;
String date;
String venue;
Boolean notifyState;
Integer notifyTime;
Boolean favouriteState;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public Integer getCategoryIcon() {
return categoryIcon;
}
public void setCategoryIcon(Integer categoryIcon) {
this.categoryIcon = categoryIcon;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getRules() {
return rules;
}
public void setRules(String rules) {
this.rules = rules;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getVenue() {
return venue;
}
public void setVenue(String venue) {
this.venue = venue;
}
public Boolean getNotifyState() {
return notifyState;
}
public void setNotifyState(Boolean notifyState) {
this.notifyState = notifyState;
}
public Integer getNotifyTime() {
return notifyTime;
}
public void setNotifyTime(Integer notifyTime) {
this.notifyTime = notifyTime;
}
public Boolean getFavouriteState() {
return favouriteState;
}
public void setFavouriteState(Boolean favouriteState) {
this.favouriteState = favouriteState;
}
}
}
答案 1 :(得分:0)
我明白了。问题是我使用的是kotlin的Pair类。一旦我定义了自己的简单Pair类,一切都正常。