Jackson中的序列化/反序列化别名基元,无需过多重复使用

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

我有一个要反序列化为Java的类。类属性之一是本身是可序列化的类,它具有一个原始(字符串)参数,并且实际上表示别名的字符串,即,带有一些额外内容的字符串,以确保其格式正确。这在各种应用程序(例如标识符)中很有用,在这种情况下,它是Cron字符串,必须具有特定的表示形式。所以我有

class ScheduleConfigurations {
    private Cron cron;
    private Set<Cron> overrides;
    // other attributes, getters/setters, constructor
}


class Cron {
    private String cronString;

    private void validate() { // validates string has correct representation }
    // getters, setters, constructor
}

显然,标准的杰克逊解串器期望使用JSON格式,>

{
    "cron": {
        "cronString": "someCronString",
    "overrides": [
        { "cronString": "someCronString1" },
        { "cronString": "someCronString2" }
    ]
}

但是,Cron类显然只是一个别名字符串。我希望以上代码被序列化/反序列化为>

{
    "cron": "someCronString",
    "overrides": ["someCronString1", "someCronString2"]
}

我可以使用带有一堆样板的自定义序列化程序来实现这一点,但是我正在寻找一种优雅的方式对杰克逊说:“嘿,该类具有一个String属性,只需将其传递并将其序列化表示作为其唯一属性”。

我有一个要反序列化为Java的类。类属性之一本身就是一个可序列化的类,它具有一个原始(字符串)参数,并且实际上表示一个别名...

java json jackson2
1个回答
0
投票
@JsonSerialize(using = ToStringSerializer.class) class Cron { private String cronString; public Cron(String cronString) { // Called by Jackson when deserializing from JSON string this.cronString = cronString; } @Override public String toString() { // Called by Jackson when serializing to JSON return this.cronString; } }
© www.soinside.com 2019 - 2024. All rights reserved.