将Gson转换一个字段为多个字段

3

假设我已将以下对象序列化为JSON字符串:

class Person {
    public final String name;
    public Person(String name) { this.name = name; }
}

Person p = new Person("Bob Falaway");
JsonObject json = gson.toJsonTree(p, Person.class).getAsJsonObject();

现在我想反序列化它,但我想将名称拆分为两个字段,firstNamelastName。我该怎么做?

我希望最终的结果是一个类似这样的类:

class RefinedPerson {
    public final String firstName;
    public final String lastName;

    public String toString() { return String.format("%s %s", firstName, lastName); }
}

Gson能实现这个吗?
1个回答

2

为类型注册自己的JsonSerializer(或者如果您愿意,可以使用TypeAdapter)?

类似于:

@JsonAdapter(PersonSerializer.class)
class Person {
    private final String name;
    Person(final String name) {
        // Some validation...
        this.name = name;
    }

    String getName() {
        return this.name;
    }
}

您的序列化器大致如下:

class PersonSerializer implements JsonSerializer<Person> {
    @Override
    public JsonObject serialise(final Person src,
                                final Type personType,
                                final JsonSerializationContext context) {

        final JsonObject json = new JsonObject();
        final String[] names = src.getName().split(" ");
        // Some validation...

        json.addProperty("firstName", names[0]);
        json.addProperty("lastName", names[1]);
        return json;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接