Jackson / Gson将JavaFX属性序列化和反序列化为json

问题描述 投票:0回答:2

我已将BooleanProperty添加到DAO类中,该类将序列化为JSON并发送到服务器以保存在MySQL数据库中。我使用BooleanProperty的原因是因为我想对JavaFX桌面应用程序中的'isActive'字段使用数据绑定。

要序列化的类:

package com.example.myapplication

import lombok.Data;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;

@Data
public class MyDAO {
    private int id;
    private String firstName;
    private String lastname;
    private final BooleanProperty isActive = new SimpleBooleanProperty();
}

我正在使用Gson序列化为JSON:

StringEntity entity = new StringEntity(new Gson().toJson(myDTO), "UTF-8");

当此序列化为JSON时,看起来像这样:

{
   "id":0,
   "first_name":"Joe",
   "last_name":"Bloggs",
   "is_active":{
      "name":"",
      "value":false,
      "valid":true

   }
}

这会在反序列化(使用Jackson时,在服务器上引起问题,因为服务器希望布尔值与将保存在数据库中的值相对应)。是否有办法从BooleanProperty中反序列化真/假值?

这是我希望在服务器中看到的内容:

{
   "id":0,
   "first_name":"Joe",
   "last_name":"Bloggs",
   "is_active": false,
}
java javafx jackson gson json-deserialization
2个回答
0
投票

尝试一下

Gson gson = FxGson.coreBuilder().setPrettyPrinting().disableHtmlEscaping().create();
StringEntity entity = new StringEntity(gson.toJson(myDTO), "UTF-8");

0
投票

我相信答案是将您不想序列化的字段标记为transient,并添加包含该值的布尔字段。

@Data
public class MyDAO {
    private int id;
    private String firstName;
    private String lastname;
    private transient final BooleanProperty booleanProp = new SimpleBooleanProperty();
    private boolean isActive = booleanProp.get();
}
© www.soinside.com 2019 - 2024. All rights reserved.