kotlin fastjson 通过反射机制实现对象json之间的转换

导入依赖,版本可以自己上网查,我都是用最新版

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类

操作就是这些了,觉得有用点个赞吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修罗_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值