正如我之前在评论中所说,使用Gson库可以轻松完成:
// Configure Gson
val gson = GsonBuilder()
// Using this strategy Gson first tries converting number to Long.
// If it fails (number is float), then it tries converting to Double
.setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE)
.create()
// Convert to JSON string
val jsonString = gson.toJson(users)
println("JSON => $jsonString")
// Store at Room as a string...
// Fetch later from Room as a string...
val type = object : TypeToken<HashMap<String, HashMap<String, Any>>>() {}.type
val fromJsonMap: HashMap<String, HashMap<String, Any>> = gson.fromJson(jsonString, type)
println("ORIGINAL MAP =>\n$users")
println("RESTORED MAP =>\n$fromJsonMap")
输出:
JSON => {
"user1": {
"filter": 0,
"view": 3,
"labelsVisibility": true,
"sort": 1,
"group": "groupId"
},
"user2": {
"filter": 0,
"view": 3,
"labelsVisibility": true,
"sort": 1,
"group": "groupId"
}
}
ORIGINAL MAP =>
{user1={filter=0, view=3, labelsVisibility=true, sort=1, group=groupId}, user2={filter=0, view=3, labelsVisibility=true, sort=1, group=groupId}}
RESTORED MAP =>
{user1={filter=0, view=3, labelsVisibility=true, sort=1, group=groupId}, user2={filter=0, view=3, labelsVisibility=true, sort=1, group=groupId}}
如您所见,原始地图users
和恢复的地图fromJsonMap
是相同的。