0Pricing
Kotlin Academy · บทเรียน

คลาสที่ทำซีเรียลไลซ์ได้

ใส่ Annotation ให้โมเดล

คลาสที่ทำซีเรียลไลซ์ได้ เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

แอนโนเทชัน @Serializable

หากต้องการทำให้คลาสซีเรียลไลซ์ได้ ให้ใส่แอนโนเทชัน @Serializable จากนั้นปลั๊กอินคอมไพเลอร์จะสร้างตัวซีเรียลไลเซอร์ให้

import kotlinx.serialization.Serializable

@Serializable
data class User(val id: Int, val name: String)

ทำงานร่วมกับคลาสข้อมูล

สามารถใส่แอนโนเทชันให้คลาสใดก็ได้ แต่ คลาสข้อมูล เป็นตัวเลือกที่ใช้บ่อยที่สุดสำหรับโมเดล เพราะจะสร้าง equals, hashCode และ toString ให้อัตโนมัติ

พร็อพเพอร์ตีทั้งหมดในตัวสร้างจะกลายเป็นฟิลด์ที่ถูกซีเรียลไลซ์

ค่าเริ่มต้น

พร็อพเพอร์ตีที่มีค่าเริ่มต้นจะกลายเป็น ไม่บังคับ ระหว่างการถอดรหัส หาก JSON ไม่ระบุพร็อพเพอร์ตีเหล่านั้น ระบบจะใช้ค่าเริ่มต้น

@Serializable
data class Config(
    val host: String,
    val port: Int = 8080,
    val secure: Boolean = false
)

พร็อพเพอร์ตีที่รับค่าว่างได้

ชนิดข้อมูลที่รับค่าว่างได้จะจับคู่กับ JSON null พร็อพเพอร์ตีที่รับค่าว่างได้แต่ไม่มีค่าเริ่มต้นยังคงเป็นพร็อพเพอร์ตีที่จำเป็นใน JSON (แต่ค่าของพร็อพเพอร์ตีอาจเป็น null ได้)

@Serializable
data class Profile(
    val name: String,
    val bio: String? = null
)

การเปลี่ยนชื่อฟิลด์ด้วย @SerialName

ชื่อฟิลด์ JSON มักแตกต่างจากรูปแบบการตั้งชื่อของ Kotlin ให้ใช้ @SerialName เพื่อจับคู่ชื่อเหล่านั้น

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class Account(
    @SerialName("user_id") val userId: Int,
    @SerialName("full_name") val fullName: String
)

การละเว้นพร็อพเพอร์ตีด้วย @Transient

ทำเครื่องหมายพร็อพเพอร์ตีด้วย @Transient เพื่อไม่รวมพร็อพเพอร์ตีนั้นในการซีเรียลไลซ์ พร็อพเพอร์ตีชั่วคราว ต้อง มีค่าเริ่มต้น

import kotlinx.serialization.Transient
import kotlinx.serialization.Serializable

@Serializable
data class Session(
    val token: String,
    @Transient val cachedAt: Long = 0L
)

คลาสซีเรียลไลซ์แบบซ้อนกัน

คลาสที่ซีเรียลไลซ์ได้สามารถมีคลาสอื่นที่ซีเรียลไลซ์ได้อยู่ภายใน ปลั๊กอินจะจัดการกราฟทั้งหมดให้โดยอัตโนมัติ

@Serializable
data class Address(val city: String, val zip: String)

@Serializable
data class Company(val name: String, val address: Address)

คอลเลกชันในโมเดล

คอลเลกชันมาตรฐาน เช่น List, Set และ Map สามารถซีเรียลไลซ์ได้ทันทีเมื่อสมาชิกของคอลเลกชันซีเรียลไลซ์ได้

@Serializable
data class Team(
    val name: String,
    val members: List<String>,
    val scores: Map<String, Int>
)

รองรับชนิดแจกแจง

คลาสแจกแจงสามารถใส่แอนโนเทชัน @Serializable และจะซีเรียลไลซ์เป็นชื่อตามค่าเริ่มต้น ใช้ @SerialName กับสมาชิกเพื่อกำหนดชื่อเอง

@Serializable
enum class Role {
    @SerialName("admin") ADMIN,
    @SerialName("user") USER
}

สรุปค่าที่จำเป็นและไม่บังคับ

พร็อพเพอร์ตีจะเป็น ค่าที่จำเป็น ใน JSON เว้นแต่จะมีค่าเริ่มต้น กฎสำคัญมีดังนี้:

  • ไม่มีค่าเริ่มต้น → จำเป็น
  • มีค่าเริ่มต้น → ไม่บังคับ
  • @Transient → ละเว้น และต้องมีค่าเริ่มต้น
  • รับค่าว่างได้แต่ไม่มีค่าเริ่มต้น → จำเป็น แต่อาจเป็นค่าว่างได้

สิ่งที่ไม่สามารถซีเรียลไลซ์ได้โดยตรง

ชนิดข้อมูลที่ไม่มีตัวซีเรียลไลเซอร์ในตัว (เช่น java.util.Date, java.time.Instant, UUID) ต้องใช้ ตัวซีเรียลไลเซอร์แบบกำหนดเอง ซึ่งจะได้เรียนรู้ในภายหลัง

การพยายามซีเรียลไลซ์ชนิดข้อมูลเหล่านี้โดยไม่มีตัวซีเรียลไลเซอร์จะทำให้เกิดข้อผิดพลาดขณะคอมไพล์

ตรวจสอบความเข้าใจ

ข้อใดกล่าวเกี่ยวกับ @Transient ได้ถูกต้อง

ทบทวน

ได้เรียนรู้การใส่แอนโนเทชันให้โมเดล:

  • @Serializable บนคลาส
  • ค่าเริ่มต้นทำให้ฟิลด์ไม่บังคับ
  • @SerialName ใช้เปลี่ยนชื่อคีย์ JSON
  • @Transient ไม่รวมฟิลด์ในการซีเรียลไลซ์ (ต้องมีค่าเริ่มต้น)

ขั้นต่อไปคือการเข้ารหัสและถอดรหัส JSON

คำถามที่พบบ่อย

บทเรียน “คลาสที่ทำซีเรียลไลซ์ได้” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คลาสที่ทำซีเรียลไลซ์ได้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คลาสที่ทำซีเรียลไลซ์ได้”

ใส่ Annotation ให้โมเดล คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “คลาสที่ทำซีเรียลไลซ์ได้” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม

ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่า kotlinx.serialization
  2. คลาสที่ทำซีเรียลไลซ์ได้
  3. การเข้ารหัสและถอดรหัส JSON
  4. ซีเรียลไลเซอร์แบบกำหนดเอง
← กลับไปที่ Kotlin Academy