Intereting Posts
Почему объектам, находящимся внутри объекта сопутствующего объекта Kotlin, не удается получить доступ к «статически», когда другие члены могут? проекции не допускаются для непосредственных подтипов супертипа Вымытый объект, все еще вызывающий метод (Mockito + Kotlin) Доступ к статической функции расширения из другого класса в Котлине? Почему построение Gradle исходного кода Kotlin приостанавливается на ~ 3 секунды «заставляя System.gc ()»? Котлин «внутренний» модификатор видимости в Android Как переопределить метод setter в котлин? Как обратиться к анонимному внутреннему классу в Котлине? Изменить уведомления в Realm для внутренних объектов? Каков канонический способ преобразования массива <Byte> в ByteArray Как передать массив целых чисел методу, ожидающему `Array <T>`? Есть ли лучший способ для фильтра null в списке? Как создать JSONObject из String в Котлине? База данных андроида Kotlin: не может использовать java.lang.String для android.database.Cursor Проблемы с доступом к сопутствующему объекту Kotlin в Groovy?

Почему строка json null, когда я передаю внутренний объект Gson (). ToJson (object) в Kotlin?

Я конвертирую объект в строку json, используя Gson в Kotlin.

Var json2 может возвращать правильный результат, но var json1 возвращает null, почему?

import android.os.Bundle import android.support.v7.app.AppCompatActivity import bll.SettingManage import info.dodata.mirror.R import model.MSetting import com.google.gson.Gson import utility.PreferenceTool class UIMain : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.layout_main) data class WiFiDefA(val Name:String, val Status: String) var aWiFiDefA=WiFiDefA("a","b") var json1=Gson().toJson(aWiFiDefA) var aWiFiDefB=WiFiDefB("c","d") var json2=Gson().toJson(aWiFiDefB) } data class WiFiDefB(val Name:String, val Status: String) } 

    Я прошел через Gson Library и обнаружил, что следующий код

     if (isAnonymousOrLocal(clazz)) { return true; } 

    isAnonymousOrLocal(clazz) возвращает true для WiFiDefA и внутри этого метода clazz.isLocalClass() возвращает true

    Но для WiFiDefB эти функции возвращают false.

    Для получения дополнительной информации перейдите по ссылке ниже

    https://github.com/google/gson/blob/0636635cbffa08157bdbd558b1212e4d806474eb/gson/src/main/java/com/google/gson/internal/Excluder.java

    То, что вы наблюдаете, является известным ограничением Gson: оно не будет сериализовать анонимные или локальные классы. Вот почему код Gson явно отказывается сериализовать ваш класс WiFiDefA , определенный внутри метода onCreate (это то, что @SangeetSuresh наблюдается путем отладки кода Gson).

    Как вы можете видеть в https://github.com/google/gson/issues/298 , была поднята проблема, чтобы изменить это и разрешить сериализацию анонимных и локальных классов, но проблема была закрыта более года назад без четкого причина.

    Поскольку я пытался с GSON lib, я объявил оба класса вне метода onCreate() .

    Как показано ниже:

     override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val aWiFiDefA=WiFiDefA("a","b") val json1=Gson().toJson(aWiFiDefA) Log.d("json1",json1.toString()) var aWiFiDefB=WiFiDefB("c","d") var json2= Gson().toJson(aWiFiDefB) Log.d("json2",json2.toString()) } data class WiFiDefA(val Name:String, val Status: String) data class WiFiDefB(val Name:String, val Status: String) 

    Это дает мне результат, который вам нужен. Вывод:

     11-17 11:58:50.448 27978-27978/? D/json1: {"Name":"a","Status":"b"} 11-17 11:58:50.452 27978-27978/? D/json2: {"Name":"c","Status":"d"} 

    Но когда я попытался получить ваш код, как показано ниже:

     11-17 11:58:01.312 27584-27584/? D/json1: null 11-17 11:58:01.320 27584-27584/? D/json2: {"Name":"c","Status":"d"} 

    Мы не можем создавать класс в области метода. Вы можете создать вложенные и внутренние классы классом в качестве вложенного класса, если хотите.

    https://kotlinlang.org/docs/reference/nested-classes.html#nested-and-inner-classes