为什么我的 LinkedHashMap 被错误地转换为 JSON 并保存在 SharedPreferences 中?
Why is my LinkedHashMap being incorrectly converted to JSON and saved in SharedPreferences?
我试图在 SharedPreferences 中保存一个对象,但首先将该对象转换为 JSON,如下所示。但是,该对象被错误地转换和保存。
private void saveSchedule() {
String jsonString = new Gson().toJson(schedule);
SharedPreferences sharedPreferences = getSharedPreferences("Schedule", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("schedule", jsonString);
editor.apply();
}
JSON 看起来像这样:
E/ {"com.example.****.****.HobbyApp@a64232":["Hobby1","Hobby2","Hobby3"]}
这使得无法保存和检索日程安排。
为什么将计划文件地址的名称转换为 JSON 并保存而不是值?请帮忙,谢谢!
JSON 仅支持字符串作为 JSON 对象 属性 名称。因此,Gson 默认调用 toString()
方法将非字符串 Map
键转换为字符串。
如果您的 Hobby
class 的实例可以很容易地表示为字符串,您可以覆盖它的 toString()
方法。但是,对于反序列化,您可能必须注册自定义 TypeAdapter
.
否则你可以使用 GsonBuilder.enableComplexMapKeySerialization()
将你的 Map
序列化为 JSON 数组。
我试图在 SharedPreferences 中保存一个对象,但首先将该对象转换为 JSON,如下所示。但是,该对象被错误地转换和保存。
private void saveSchedule() {
String jsonString = new Gson().toJson(schedule);
SharedPreferences sharedPreferences = getSharedPreferences("Schedule", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("schedule", jsonString);
editor.apply();
}
JSON 看起来像这样:
E/ {"com.example.****.****.HobbyApp@a64232":["Hobby1","Hobby2","Hobby3"]}
这使得无法保存和检索日程安排。
为什么将计划文件地址的名称转换为 JSON 并保存而不是值?请帮忙,谢谢!
JSON 仅支持字符串作为 JSON 对象 属性 名称。因此,Gson 默认调用 toString()
方法将非字符串 Map
键转换为字符串。
如果您的 Hobby
class 的实例可以很容易地表示为字符串,您可以覆盖它的 toString()
方法。但是,对于反序列化,您可能必须注册自定义 TypeAdapter
.
否则你可以使用 GsonBuilder.enableComplexMapKeySerialization()
将你的 Map
序列化为 JSON 数组。