【问题标题】:Gson transform a field into multiple fieldsGson 将一个字段转换为多个字段
【发布时间】:2017-07-25 23:05:04
【问题描述】:

假设我已将以下对象序列化为 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 有可能吗?

【问题讨论】:

    标签: java json serialization gson


    【解决方案1】:

    为类型注册您自己的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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      相关资源
      最近更新 更多