Kotlin Json文字列のserializationのParseが使えなくなったので、使えるように修正しました。

　金田著「[はじめてのandroidプログラミング 第５版](https://www.sbcr.jp/product/4815607968/)」を使って、勉強しています。

　「第１２章アニメーションする　ツーリスト情報アプリを作ろう」の第一段階ｐ３９３まで、写経が進みました。コンパイルしたところ、エラーが発生しましたので、その対処方法を報告します。なおこの記事は、「[Kotlin Json文字列のserialization　正しい対処できなかったので逃げ対応で対処しました](https://qiita.com/guijiu/items/28cd594c660d9989ce31#comment-80d9640a5be86934cf92)]の続編です。そちらも確認してください。

　どうも、Kotlinxの Json文字列のserializationのParseが使えなくなったようなので、対応するように変更しました。

　以下、本書を持っている前提で説明します。本書を使って勉強中の方、一緒に勉強しましょう。

　また「[Kotlin Serialization Guide](https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serialization-guide.md#kotlin-serialization-guide)」を翻訳しています。[こちら](https://qiita.com/guijiu/items/097e858e4930b6d7e6c0#kotlin-serialization-%E3%82%AC%E3%82%A4%E3%83%89-%E7%BF%BB%E8%A8%B3)も参考にしてください。

##1.オリジナルのコードでエラーが発生する原因
　本書では、AndroidStudio4.1を使用環境としています。私の環境は4.1.2です。この時、本書のサポートページのコード(projectのbuild.gradleファイル)を見ると、次のようにext.kotlin_versionが"1.3.72"なっています。

```build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    ext.kotlin_version = "1.3.72"       // 本書オリジナル
    repositories {
        // 省略
    }
    dependencies {
        // 省略
    }
}
allprojects {
        // 省略
}

task clean(type: Delete) {
        // 省略
}
```

　しかし、私の環境はAndroidStuido4.1.2でプロジェクトを作るとext.kotlin_versionが"1.4.21"になっています。これが原因です。module側のbuild.gradleのdependenciesに追加していたimplementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0" が kotlin_version"1.4.21"に対応していないためでした。

```build.gradle
plugins {
    // 省略    
}
android {
    // 省略    
}
dependencies {
    implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0"     // オリジナル
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    // 省略
}
```

##2.AndroidStudio4.1.2（kotlin_version"1.4.21"）に対応するために
　AndroidStudio4.1.2（kotlin_version"1.4.21"）に対応するためにはKotlin.Serializationを最新の1.0.1に変更しなければなりません。変更箇所は次のとおりです。

###(1) Projectのbuild.gradleファイルの変更点
　ext.kotlin_version を "1.4.21"に変更します。

```
build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    ext.kotlin_version = "1.4.21"     // 追記（AndroidStuido4.1.2でプロジェクトをつくると、このバージョンだと思います。）
//    ext.kotlin_version = "1.3.72"       // 削除
    repositories {

// 以下省略

```

###(2) Moduleのbuild.gradleファイルの変更点
 Moduleのbuild.gradleファイルの中のdependenciesのブロックに記述されているkotlinx-serializatioの内容を書き変える。書き変え終わったら、SyncNowを行う。またAndroidStudioからMigrationの指示があれば行う（正確には、意味を理解せず実施した）。

```build.gradle
plugins {
    // 省略
}
android {
    // 省略
}
dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1'    // 変更追記
//    implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0"    // 削除
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
//以下、省略
}
```

###(3)Sight.ktファイルの変更点
　Jsonデータをオブジェクトに変換する部分を変更する。

```
import android.content.res.Resources
import kotlinx.serialization.builtins.ListSerializer
import kotlinx.serialization.json.Json

//import kotlinx.serialization.builtins.list    // implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1' 対応時に削除
//import kotlinx.serialization.json.JsonConfiguration    // implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1' 対応時に削除
//import kotlinx.serialization.parse    // implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1' 対応時に削除

import java.io.BufferedReader
import java.io.InputStreamReader
import kotlinx.serialization.Serializable    // @Serializableを有効にするために手書きで追記した（Alt＋Enterではインポートされなかった。）


@Serializable
class Sight (
    // 省略
    )

fun getSights(resources: Resources): List<Sight>{
    // 省略
    
//    val obj = Json(JsonConfiguration.Stable).parse(Sight.serializer().list, str)   // 削除
    val obj = Json { allowStructuredMapKeys = true }
                  .decodeFromString(ListSerializer(Sight.serializer()), str)  // 変更追記

    return obj
}
```

##最後に
　とりあえず動くようにしましたが、まだ理解していません。