【发布时间】:2014-08-17 19:35:07
【问题描述】:
我正在开发一个 Android 应用,我在其中使用 Jackson Annotation API 反序列化 JSON。
在我尝试包含 AndroidActive ORM 之前,它运行得非常好,这需要您的 POJO 从 Model 类 (https://github.com/pardom/ActiveAndroid/blob/master/src/com/activeandroid/Model.java) 继承。
我的 JSON 在 asyncTask 中被反序列化:
Reader reader = new InputStreamReader(url.openStream());
try {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
rootJsonObj = mapper.readValue(reader, MyPojo.class);
} catch (JsonGenerationException e) {
e.printStackTrace();
}
快速浏览一下我的 pogo:
@Table(name = "RootRecipes") //AndroidActive annotation
public class RootRecipes extends Model {
@JsonProperty("deleted") //Jackson annotation
@Column(name = "deleted") //AndroidActive annotation
public ArrayList<Number> deleted;
@JsonProperty("meta")
@Column(name = "meta")
public Meta meta;
@JsonProperty("objects")
@Column(name = "objects")
public ArrayList<Objects> objects;
json 非常大,超过 2mo,但结构如下:
{"deleted": [107981, 107982, 107995, 107999, 108012, 108014],
"meta": {"is_anonymous": true, "latest": 1405555349, "limit": 1000, "next": null, "offset": 0, "page": 1, "pages": 1, "previous": null, "total_count": 20},
"objects": [<more objects>]}
给我的错误是:
com.fasterxml.jackson.databind.JsonMappingException: Instantiation of [simple type, class com.example.app.json.MyPojo] value failed: null
一旦我从 Model 中删除了继承,解析就会正常工作。 我无法弄清楚这个错误的原因。
谢谢。
【问题讨论】:
-
您能告诉我们您要反序列化的
JSON吗? -
我已经添加了它的结构,它非常大。然而,只要 MyPojo 不扩展 Model,Jackson 的解析就可以很好地工作。
-
好的,谢谢。我看到这个模型类包含属于 Android 世界的元素。我认为这是
Jackson无法反序列化和实例化此对象的原因。您应该将 Android 的属性与真实数据分离。 -
感谢您的关注。我到处看了看,我可能对杰克逊还不够熟悉,无法解耦这些属性。您对如何进行有任何猜测吗?
标签: java android orm annotations jackson