【Kotlin】kotlinx.serialization.SerializationException: Serializer for class ‘XXX’ is not found.

現象

クラスを定義しているにも関わらず、クラスが見つからないと怒られる

kotlinx.serialization.SerializationException: Serializer for class 'Weather' is not found.

こんな感じで定義しているのに↓

@Serializable
data class CurrentWheather(
  @SerialName("temperature") val temperature : Double,
  @SerialName("windspeed") val windspeed : Double,
  @SerialName("winddirection") val winddirection : Double,
  @SerialName("weathercode") val weathercode : Int,
  @SerialName("time") val time : String
)

@Serializable
data class Weather(
  @SerialName("latitude") val latitude : Double,
  @SerialName("longitude") val longitude : Double,
  @SerialName("generationtime_ms") val generationtime_ms : Double,
  @SerialName("utc_offset_seconds") val utc_offset_seconds : Int,
  @SerialName("timezone") val timezone : String,
  @SerialName("timezone_abbreviation") val timezone_abbreviation : String,
  @SerialName("elevation") val elevation :Double,
  @SerialName("current_weather") val current_weather : CurrentWheather
)

原因と対策

プラグインの宣言が足りなかったため、うまく読み込めていなかった模様。

以下をbuid.gradleに追加して「Sync Project with Gradle Files」して再ビルド

プロジェクトのbuild.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
  id 'com.android.application' version '7.3.1' apply false
  id 'com.android.library' version '7.3.1' apply false
  id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
  id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.20' // これ (バージョンは↑と同じ)
}

 

moduleのbuild.gradle

plugins {
  id 'com.android.application'
  id 'org.jetbrains.kotlin.android'
  id 'kotlinx-serialization' //これ
}

 

コメント

タイトルとURLをコピーしました