diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt index 7d408fc6..4fc28db9 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt @@ -8,6 +8,11 @@ import android.util.Log import androidx.preference.PreferenceManager import com.google.gson.Gson import com.google.gson.GsonBuilder +import com.google.gson.JsonPrimitive +import com.google.gson.JsonSerializationContext +import com.google.gson.JsonSerializer +import com.google.gson.annotations.SerializedName +import com.google.gson.reflect.TypeToken import com.tencent.mmkv.MMKV import com.v2ray.ang.AppConfig import com.v2ray.ang.AppConfig.ANG_CONFIG @@ -22,6 +27,7 @@ import com.v2ray.ang.dto.V2rayConfig.Companion.TLS import com.v2ray.ang.util.MmkvManager.KEY_SELECTED_SERVER import java.net.URI import java.util.* +import java.lang.reflect.Type import com.v2ray.ang.extension.idnHost import com.v2ray.ang.extension.removeWhiteSpace @@ -987,9 +993,18 @@ object AngConfigManager { && server.contains("routing") ) { try { - val gson = GsonBuilder().setPrettyPrinting().create() + //val gson = GsonBuilder().setPrettyPrinting().create() + val gson = GsonBuilder() + .setPrettyPrinting() + .disableHtmlEscaping() + .registerTypeAdapter( // custom serialiser is needed here since JSON by default parse number as Double, core will fail to start + object : TypeToken() {}.type, + JsonSerializer { src: Double?, _: Type?, _: JsonSerializationContext? -> JsonPrimitive(src?.toInt()) } + ) + .create() val serverList: Array = - Gson().fromJson(server, Array::class.java) + Gson().fromJson(server, Array::class.java) + if (serverList.isNotEmpty()) { var count = 0 for (srv in serverList) { @@ -1016,7 +1031,7 @@ object AngConfigManager { config.subscriptionId = subid config.fullConfig = Gson().fromJson(server, V2rayConfig::class.java) config.remarks = System.currentTimeMillis().toString() - // config.remarks = config.fullConfig?.remarks ?: System.currentTimeMillis().toString() + //config.remarks = config.fullConfig?.remarks ?: System.currentTimeMillis().toString() val key = MmkvManager.encodeServerConfig("", config) serverRawStorage?.encode(key, server) return 1