Gson抛出JSON错误“java.lang.IllegalStateException"

时间:2016-03-22 17:10:39

标签: java android gson parcelable illegalstateexception

我有这个模型:Map<MyObjectA, Set<MyObjectB>>其中MyObjectA是一个复杂的对象但MyObjectB不是。Parcelable。两者都是{ "my.package.models.MyObjectA@5415636": [{ "member1": "val", "member2": "val", "member2": "val", ... }] }

以下是一个例子:

private boolean putObject(String key, Object object) {
    ...
    return mPreferences.edit().putString(key, mGson.toJson(object)).commit();
}

此操作有效:

type = new TypeToken<Map<MyObjectA, Set<MyObjectB>>>() {}.getType());
private <T> T getObject(String key, Type t) {
    ...
    return mGson.fromJson(mPreferences.getString(key, null), type);
}

但这并不是:

line 810

投掷:

  

java.lang.IllegalStateException:预期为BEGIN_OBJECT但是为STRING   在第1行第3栏路径$。

我已经运行了调试模式并在Gson.java的{​​{1}}处使用了断点:

...
try {
      reader.peek();
      isEmpty = false;
      TypeToken<T> typeToken = (TypeToken<T>) TypeToken.get(typeOfT);
      TypeAdapter<T> typeAdapter = getAdapter(typeToken);
      T object = typeAdapter.read(reader);
      return object;
    } catch (EOFException e) {...}
}

typeTokentypeAdapter是正确的,但typeAdapter.read(reader);会失败...
typeToken = java.util.LinkedHashMap<MyObjectA, java.util.HashSet<MyObjectB>>
typeAdapter class com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter

我缺少什么?
感谢。

修改

public class MyObjectA {
    private List<MyObjectB> list;
    private String a;
    private String b;
    private String c;
    private int one;
    private int two;
...
}

public class MyObjectB {
    private String x;
    private String y;
    private String z;
...
}

0 个答案:

没有答案