如何在公共构造函数中使用不可变对象,但不序列化为元组样式?

时间:2019-02-22 18:54:12

标签: java json serialization gson immutables-library

我正在使用Immutables,我将生成的类配置为通过构造函数实例化。

@Gson.TypeAdapters
@Value.Immutable(builder = false)
@Value.Style(
        of = "new",
        allParameters = true,
        get = {"get*", "is*"})
public interface MyClass {
  String getX();
  boolean isGreen();
}

不过,现在实例已按照https://immutables.github.io/json.html#tuples-of-constructor-arguments

中的指定序列化为元组。
    ["someValueOfX", true]

相反,我需要与使用构建器而不是构造器时相同的序列化

    {
      "x" : "someValueOfX",
      "green" : true
    }

是否可以禁用序列化到元组?

1 个答案:

答案 0 :(得分:1)

格式切换似乎是您通过使用builder=false-从链接获得的故意副作用:

  

为了将对象封送为元组,您需要注释构造函数参数并禁用生成器的生成

我同意将构建器的存在与序列化格式结合起来很尴尬,但这似乎是唯一的方法……因此,获得所需序列化格式的最佳方法就是删除builder=false