package com.sw.inbound.utils import com.google.gson.Gson import com.google.gson.GsonBuilder import com.google.gson.reflect.TypeToken import java.lang.reflect.Type object GsonUtils { // 默认的 Gson 实例 private val defaultGson: Gson by lazy { GsonBuilder() .setDateFormat("yyyy-MM-dd HH:mm:ss") // 设置日期格式 // .disableHtmlEscaping() // 禁止转义HTML标签 .create() } /** * 获取默认配置的 Gson 实例 */ fun getGson(): Gson = defaultGson /** * 将对象转换为 JSON 字符串 * @param obj 要转换的对象 * @return JSON 字符串 */ fun toJson(obj: Any?): String { return if (obj == null) "" else defaultGson.toJson(obj) } /** * 将 JSON 字符串转换为对象 * @param json JSON 字符串 * @param clazz 目标类 * @return 转换后的对象 */ fun fromJson(json: String?, clazz: Class): T? { if (json.isNullOrEmpty()) { return null } return try { defaultGson.fromJson(json, clazz) } catch (e: Exception) { e.printStackTrace() null } } /** * 将 JSON 字符串转换为对象 (支持泛型) * @param json JSON 字符串 * @param type 类型令牌,用于获取泛型类型 * @return 转换后的对象 */ fun fromJson(json: String?, type: Type): T? { if (json.isNullOrEmpty()) { return null } return try { defaultGson.fromJson(json, type) } catch (e: Exception) { e.printStackTrace() null } } /** * 将 JSON 字符串转换为 List 对象 * @param json JSON 字符串 * @param clazz List 中的元素类型 * @return 转换后的 List 对象 */ fun fromJsonList(json: String?, clazz: Class): List? { if (json.isNullOrEmpty()) { return null } return try { val type = TypeToken.getParameterized(List::class.java, clazz).type defaultGson.fromJson>(json, type) } catch (e: Exception) { e.printStackTrace() null } } /** * 将 JSON 字符串转换为 Map 对象 * @param json JSON 字符串 * @param keyClazz Map 的 key 类型 * @param valueClazz Map 的 value 类型 * @return 转换后的 Map 对象 */ fun fromJsonMap( json: String?, keyClazz: Class, valueClazz: Class ): Map? { if (json.isNullOrEmpty()) { return null } return try { val type = TypeToken.getParameterized(Map::class.java, keyClazz, valueClazz).type defaultGson.fromJson>(json, type) } catch (e: Exception) { e.printStackTrace() null } } /** * 将对象转换为另一种类型的对象 * @param obj 源对象 * @param clazz 目标类型 * @return 转换后的对象 */ fun convert(obj: Any?, clazz: Class): T? { if (obj == null) { return null } return fromJson(toJson(obj), clazz) } }