杰克逊将对象序列化为字符串

Posted

技术标签:

【中文标题】杰克逊将对象序列化为字符串【英文标题】:Jackson Serializing Object as String 【发布时间】:2017-09-22 01:40:46 【问题描述】:

所以我有一个看起来像这样的 Item 类(不包括额外的东西):


"id": 1,
"item": "something",
"account": 
    "id": 5,
    "name": "somename"
      

我希望所有者点击显示为例如这样


"id": 1,
"item": "something",
"account": "somename"

我知道如何通过更改在 Jackson 中序列化 Item 的方式来做到这一点,但是如果我要更改序列化 Item 的方式,我将不得不包括它具有的所有额外字段,并且 Item 也是一个基类,所以我还必须对所有子类做一些事情,这是太多的工作(或者是不是,不知道是否有人有一个简单的解决方案如何仅序列化一个字段并包括所有其他字段)。所以我的问题是我可以序列化 Account 类并让它返回一个简单的字符串(不是 json 对象或类似的东西)。 我尝试使用 JsonGenerator 使其看起来相似,但到目前为止我最好的方法是:


"id": 1,
"item": "something",
"account": "account":"somename"

谢谢!

【问题讨论】:

分享您的代码,提出任何更改建议 检查这个是否适合你...***.com/questions/43200410/… 【参考方案1】:

我想你想要的是来自 Jackson 的 @JsonIdentityInfo。

此注解允许您指定子实体如何在父实体中序列化。

这是一个例子:

    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="productDescription")
@JsonIdentityReference(alwaysAsId=true) // otherwise first ref as POJO, others as id
private Product product;

这告诉 Jackson 产品 bean 应该使用其“productDescription”字段进行序列化。

您也可以查看本教程:

http://www.baeldung.com/jackson-annotations

【讨论】:

【参考方案2】:

从头开始,我发现我的错误是我总是从以下内容开始: jsonGenerator.writeStartObject(); 并以: jsonGenerator.writeEndObject(); 它本身使它返回一个对象。我所要做的就是使用 writeString 方法。

【讨论】:

以上是关于杰克逊将对象序列化为字符串的主要内容,如果未能解决你的问题,请参考以下文章

杰克逊 - 序列化日期对象

杰克逊未能将字符串反序列化为 Joda-Time

序列化对象时如何强制杰克逊将数字写为字符串

杰克逊在没有双引号的情况下序列化和反序列化对象

杰克逊:将纪元反序列化为 LocalDate

使用杰克逊将双向 JPA 实体序列化为 JSON