คลาสที่ทำซีเรียลไลซ์ได้
ใส่ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า kotlinx.serialization
- คลาสที่ทำซีเรียลไลซ์ได้
- การเข้ารหัสและถอดรหัส JSON
- ซีเรียลไลเซอร์แบบกำหนดเอง