导入依赖,版本可以自己上网查,我都是用最新版
implementation ‘com.alibaba:fastjson:2.0.28’
新建一个JsonHelp类
package com.example.test.temp
import android.content.Context
import android.util.Log
import com.alibaba.fastjson.JSON
import com.example.test.Config
/**
* 规定了一个泛型T,例如传入了Record::class.java,
* 则T==Record,此时传入的Class<T> = Class<Record>
* nayClass为实际类对象
* anyClass: Class<T>表示anyClass必须为T类,也就是Record类
* 这些操作在Java称之为反射机制
*/
class JsonHelp<T : Any>(anyClass: Class<T>) {
// 加载类到成员变量
private val anyClass: Class<T> = anyClass
/**
* 字符转对象
* 传入一个json字符,返回该类的实例
*/
open fun parseToObject(string:String): Any {
return try{
// 解析成功则返回结果
JSON.parseObject(string, anyClass) as T
}catch(e: java.lang.Exception){
// 解析失败返回该类的实例Record(),也就是Java的new Record()
// newInstance通过内存实例化了一个对象
anyClass.newInstance()
}
}
/**
* 根据传入类转为json
*/
open fun toJson(any: Any): String{
return try{
JSON.toJSONString(any)
}catch(e: java.lang.Exception){
""
}
}
}
接下来看看怎么使用这两个方法
新建一个普通类Record.tk,不用象Java那样写setter和getter
package com.example.test.model
class Record {
var name= "liming"
var pw= "123456"
}
也可以是data类
package com.example.test.model
data class Record {
var name:String= "liming",
var pw:String= "123456"
}
// 实例化数据类
var record = Record()
// 实例化json类
var jsonHelp = JsonHelp(Record::class.java) as Record
// 将Record转为json字符
var string = jsonHelp .toJson(record)
// 将json字符转回Record
var record2 = jsonHelp.parseToObject(string)
// 注意由于jsonHelp传入的是Record::class.java
// 所以jsonHelp只能返回Record类
// 想要返回其他类需要重新实例化JsonHelp
// 比如
// var jsonHelp1 = JsonHelp(Record::class.java)
// var jsonHelp2 = JsonHelp(Other::class.java)
// jsonHelp2只能操作Other类和返回Other类