假设您可能拥有的不同的JSON请求彼此之间并没有太大不同,我建议采用一种不同的方法,我认为这种方法更为简单。
假设您有以下3个不同的JSON请求:
{ "type":"LOGIN", "username":"someuser", "password":"somepass"}////////////////////////////////{ "type":"SOMEREQUEST", "param1":"somevalue", "param2":"somevalue"}////////////////////////////////{ "type":"OTHERREQUEST", "param3":"somevalue"}Gson允许您使用一个类来 包装 所有可能的响应,如下所示:
public class Request { @SerializedName("type") private String type; @SerializedName("username") private String username; @SerializedName("password") private String password; @SerializedName("param1") private String param1; @SerializedName("param2") private String param2; @SerializedName("param3") private String param3; //getters & setters}通过使用批注
@SerializedName,当Gson尝试解析JSON请求时,它会针对该类中的每个命名属性查找JSON请求中是否存在同名字段。如果没有此类字段,则将类中的属性设置为
null。
这样,您可以仅使用您的
Request类来解析许多不同的JSON响应,如下所示:
Gson gson = new Gson();Request request = gson.fromJson(jsonString, Request.class);
将JSON请求解析到您的类之后,就可以将数据从 wrap 类传输到具体
XxxxRequest对象,例如:
switch (request.getType()) { case "LOGIN": LoginRequest req = new LoginRequest(request.getUsername(), request.getPassword()); break; case "SOMEREQUEST": SomeRequest req = new SomeRequest(request.getParam1(), request.getParam2()); break; case "OTHERREQUEST": OtherRequest req = new OtherRequest(request.getParam3()); break;}请注意,如果您有许多不同的JSON请求并且这些请求彼此之间非常不同,则此方法会变得更加乏味,但是即使如此,我仍然认为这是一种很好且非常简单的方法…



