是否可以使用GSON将句点反序列化为句点作为嵌套对象?

这是我尝试使用GSON使用的JSON类型的示例:

{ "person": { "name": "Philip" "father.name": "Yancy" } } 

我想知道是否可以将此JSON反序列化为以下结构:

 public class Person { private String name; private Father father; } public class Father { private String name; } 

以便:

 p.name == "Philip" p.father.name == "Yancy" 

目前我使用@SerializedName获取包含句点的属性名称,例如:

 public class Person { private String name; @SerializedName("father.name") private String fathersName; } 

但是,这并不理想。

从查看文档看起来似乎没有立即可行,但可能有一些我错过了 – 我是新手使用GSON。

不幸的是我无法更改我正在消耗的JSON,而且我不愿意切换到另一个JSON解析库。

据我所知,你不能直接这样做,因为Gson会将father.name理解为单个字段。

您需要编写自己的自定义反序列化器 。 请参阅此处的 Gson用户指南说明。

我从未尝试过,但似乎并不太难。 这篇文章也可能有所帮助。

看看Gson的用户指南和该post中的代码,您需要这样的内容:

 private class PersonDeserializer implements JsonDeserializer { @Override public Person deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { JsonObject jobject = (JsonObject) json; Father father = new Father(jobject.get("father.name").getAsString()); return new Person(jobject.get("name").getAsString(), father); } } 

假设你有合适的构造函数……

然后:

 GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Person.class, new PersonDeserializer()); Gson gson = gsonBuilder.create(); Person person = gson.fromJson(jsonString, Person.class); 

并且Gson将调用您的反序列化器以将JSON反序列化为Person对象。

注意:我没有尝试这个代码,但它应该是这样或类似的东西。