Java Gson将一个字段转换为多个字段
假设我已将以下对象序列化为json字符串:Java Gson将一个字段转换为多个字段,java,json,serialization,gson,Java,Json,Serialization,Gson,假设我已将以下对象序列化为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(); 现在我想反序列化它,但我想将名称拆分
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();
现在我想反序列化它,但我想将名称拆分为两个字段,firstName
和lastName
。我该怎么做
我希望最终的结果类似于:
class RefinedPerson {
public final String firstName;
public final String lastName;
public String toString() { return String.format("%s %s", firstName, lastName); }
}
这在Gson中完全可能吗?为类型注册您自己的
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;
}
}
您的serialiser看起来像:
@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;
}
}
类PersonSerializer实现JsonSerializer{
@凌驾
公共JsonObject序列化(最终用户src,
最终类型personType,
最终JsonSerializationContext(上下文){
final JsonObject json=new JsonObject();
最终字符串[]name=src.getName().split(“”);
//一些验证。。。
addProperty(“firstName”,名称[0]);
addProperty(“lastName”,名称[1]);
返回json;
}
}