java - 如果您决定重命名类中的字段,如何读取旧的 json 字符串(使用 gson)
问题描述
以前,我们有以下类
public class Checklist {
private final long id;
private String text;
private boolean checked;
public Checklist(long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
public long getId() {
return id;
}
}
以下 json 操作(字符串到对象)运行良好。
String string = "[{\"checked\":false,\"id\":0,\"text\":\"Boodschappen\"},{\"checked\":false,\"id\":1,\"text\":\"Melk\"}]";
GsonBuilder builder = new GsonBuilder();
final Gson gson = builder.create();
List<Checklist> checklists = gson.fromJson(string, new TypeToken<List<Checklist>>() {}.getType());
for (Checklist checklist : checklists) {
System.out.println("--> " + checklist.getText());
}
现在,我们将类“升级”到以下,以节省磁盘空间。
public class Checklist {
@SerializedName("i")
private final long id;
@SerializedName("t")
private String text;
@SerializedName("c")
private boolean checked;
public Checklist(long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
public long getId() {
return id;
}
}
它将与新的 json 字符串一起使用
String string = "[{\"c\":false,\"i\":0,\"t\":\"Boodschappen\"},{\"c\":false,\"i\":1,\"t\":\"Melk\"}]";
GsonBuilder builder = new GsonBuilder();
final Gson gson = builder.create();
List<Checklist> checklists = gson.fromJson(string, new TypeToken<List<Checklist>>() {}.getType());
for (Checklist checklist : checklists) {
System.out.println("--> " + checklist.getText());
}
但是,我们仍然希望能够将旧的 json 字符串转换回新的 Object。
String oldString = "[{\"checked\":false,\"id\":0,\"text\":\"Boodschappen\"},{\"checked\":false,\"id\":1,\"text\":\"Melk\"}]";
我可以知道我怎么能做到这一点?
解决方案
您可以将备用作为参数传递给 SerializedName
@SerializedName(value = "fullName", alternate = "username")
请参考这个 Javadoc
推荐阅读
- python - 新的 StanfordNLP 本机 Python 包和 Core-NLP 的 python 包装器有什么区别?
- html - 无法从导航栏中删除空格(左侧和右侧)
- c# - 如何使用 C#-Unity 将 Json 文件转换为字典
- flutter - 为什么 CustomSingleChildLayout 不能依赖于孩子的大小?
- swift - 如何使用标签显示正确的摘要
- uikit - “类型‘UIAlertController’没有成员‘样式’”
- android - 尝试添加网格布局时如何处理“发现现有项目依赖项不一致”的问题
- qt - 启动 QThread/QTimer 会使 qt/qml 应用程序在 Raspberry Pi 设备上使用 std::bad_alloc 崩溃
- c++ - 如果创建对象并为其赋值,转换构造函数会进行哪些转换?
- node.js - 是否可以在 nodejs 进程和 Electron 子进程之间进行通信?