我有一个类**User
**,我从system1接收到JSON(用于用户类),我应该读取信息,验证,然后转发到system2,我无法访问这两个系统,问题是键的名称不同,我想区分反序列化和序列化名称,接收到的JSON是:
一个月一个月"{"username":"user1","password":"123456","country":"US"}"
但斯派应该是这样的
我使用的是Gson lib,这是我的代码:
用户类别:
class User implements Cloneable {
@SerializedName("username")
private String username ;
@SerializedName("password")
private String password ;
@SerializedName("country")
private String country ;
}
TestJson类别
class TestJson {
private static GsonBuilder gsonBuilder;
private static Gson gson;
public static Object fromJson(String json, Class clz) {
gson = new Gson();
return gson.fromJson(json, clz);
}
public static String toJson(Object obj) {
gsonBuilder = new GsonBuilder();
gson = gsonBuilder.create();
String json = gson.toJson(obj);
return json;
}
public static void main(String[] args) {
String json2 = "{\"userId\":\"user1\",\"pwd\":\"123456\",\"country\":\"US\"}";
User user = (User) TestJson.fromJson(json2, User.class);
System.out.println(user.getPassword());
User u = new User("user1","123456","US");
String json1 = TestJson.toJson(u);
System.out.println(json1);
}
}
3条答案
按热度按时间ia2d9nvy1#
如果有字段的替代名称,只需使用@SerializedName的
alternate
参数h6my8fg22#
您可以为此目的建立自订序列化程式/还原序列化程式。
串行器:
解串器:
并创建Gson示例:
示例
编辑:这是一个自定义的反序列化器的例子,它可能符合你的需要。在这种情况下,我们不需要自定义的序列化器。
添加此
UserDeserializer.java
:将您的
fromJson
实现替换为以下代码(我使用泛型以避免在调用fromJson
时需要强制转换):4nkexdtk3#
我能想到的唯一方法是为JsonObject定制一个适配器或deser,然后将其Map到您的User。
使用Genson,您可以创建两个Genson示例,一个用于反序列化,另一个用于序列化。反序列化中使用的示例可以配置为具有这样重命名的属性。