【发布时间】:2016-12-30 16:49:41
【问题描述】:
我正在将一个对象编组为 JSON,该 JSON 在 String 属性中具有 JSON (String actionsJSON)。这导致 JSON 被转义,所以我使用 Jackson 注释 @JsonRawValue 来获取该属性中的 JSON 不会被转义。问题是,当我将其解组回字符串属性(反向过程)时,Jackson 处理 JSON(具有 JSON 数组)并抛出错误,因为 java 类属性只是一个字符串:
Can not deserialize instance of java.lang.String out of START_ARRAY token
我怎样才能让 Jackson 只复制该属性的内容而不尝试处理它,以便我在 String 属性中拥有 JSON 代码,就像在原始对象中一样?
(我在目标类中尝试过@JsonRawValue,...@JsonSerialize(using = ToStringSerializer.class, as = StringSerializer.class) 但错误仍然存在。
【问题讨论】:
-
你生成
actionsJSON的内容吗?有没有机会将其保留为Object并让 Jackson 对其进行序列化? -
我手动将它生成到字符串中,因为动态内容与 Java 属性无关,这就是为什么我需要 @JsonRawValue 以便杰克逊在编组时不会将其重新转换为 JSON 两次(转义它)。问题并不是真正的序列化,而是当我将其反序列化回 String 属性时。
-
@icordoba 问题是@JsonRawValue 仅用于序列化,而不是反序列化。使用
Object而不是 String 并让 Jackson 序列化(和反序列化)可以解决问题。 -
我的问题大概和这个一样:stackoverflow.com/questions/27911591/…
标签: json jackson marshalling