เราได้เพิ่มการพึ่งพาของไลบรารีตัวแปลง Json
แต่ทำไมเราถึงต้องการตัวแปลงนี้? ตัวแปลง Json
เป็นส่วนประกอบของ retrofit.
มันมีหน้าที่ในการแปลงข้อมูล Json จากการตอบสนองของเครือข่ายเป็นวัตถุ Kotlin
หรือ Java และในทางกลับกันใน retrofit
โดยปกติแล้วคุณจะกำหนดค่าตัวแปลง Json เป็นส่วนหนึ่งของอินสแตนซ์ retrofit ของคุณ
ดังนั้น ตัวแปลง Json จึงถูกใช้เพื่อแปลงอ็อบเจ็กต์ Java ให้เป็นรูปแบบ Json ของมัน
นอกจากนี้ยังสามารถใช้แปลงสตริง Json ให้เป็นอ็อบเจ็กต์ Java ที่เทียบเท่ากันได้
คิดถึงตัวแปลง Json ที่ใช้สำหรับการแปลงข้อมูลเป็นลำดับและการแปลงข้อมูลกลับจากลำดับของคำตอบ Json
Json มีตัวแปลงข้อมูลแบบอนุกรม (Serializers) และตัวแปลงข้อมูลแบบถอดอนุกรม (Deserializers) ในตัวหลายตัว ตัวแปลงข้อมูลแบบอนุกรมช่วยให้สามารถแปลงสตริง Json
เป็นประเภท Java ที่สอดคล้องกันได้ ส่วนตัวแปลงข้อมูลแบบถอดอนุกรมช่วยให้สามารถแปลงจาก Java เป็นรูปแบบ Json ได้
เราจะทำการส่งข้อมูลแบบต่อเนื่อง (serialize) ในตอนแรก เพราะเราจำเป็นต้องนำข้อมูลจาก Json
มาแปลงเป็นวัตถุใน Kotlin หรือ Java
กลับไปที่คลาสโมเดลคำถามของเรา
เราใช้ชื่อที่จัดลำดับอนุกรมของคำอธิบายประกอบนี้และการเปิดเผยคำอธิบายประกอบนี้
ก่อนอื่น ขอให้ฉันพูดถึงชื่อซีเรียลและชื่อซีเรียล
หมายเหตุคือหมายเหตุที่จัดเตรียมโดยไลบรารี Json
ใช้เพื่อแมปฟิลด์ของอ็อบเจ็กต์ Java หรือ Kotlin กับชื่อคีย์หรือฟิลด์ในข้อมูล Json
เมื่อคุณได้รับข้อมูล Json จาก API เช่นการตอบกลับนี้
คีย์ใน Json อาจไม่ตรงกับชื่อตัวแปรที่คุณต้องการใช้ในคลาส Java ของคุณเสมอไป
ดังนั้น ตัวอย่างเช่น ที่นี่เรามีคำถามที่เป็นข้อความ
ถ้าฉันตั้งชื่อมันว่าเป็นเนื้อหาของคำถาม
ตัวอย่างเช่น นี่คือเนื้อหาของคำถามแบบตัวแปร
ข้อความคำถามนี้ไม่ตรงกับคำถามหลัก
ดังนั้น การทำเครื่องหมายชื่อแบบอนุกรมจึงช่วยให้คุณสามารถระบุการแมประหว่างคีย์
Json และฟิลด์ของออบเจ็กต์ได้
ที่นี่ฉันกำลังบอกว่าเนื้อหาของคำถามนี้คล้ายกับคีย์คำถามในคำตอบของ API
คำแนะนำของฉันคือให้คุณสร้างชื่อตัวแปรให้เหมือนกับคีย์และคอลัมน์ในฐานข้อมูล
ดังนั้นนี่คือคำถามสำคัญ ตัวเลือกที่หนึ่ง ตัวเลือกที่สอง
ตัวเลือกที่สาม ตัวเลือกที่สี่ และตัวเลือกที่ถูกต้องพร้อมขีดเส้นใต้สำหรับคำถามนั้น
เพื่อป้องกันข้อผิดพลาดที่อาจเกิดขึ้น ให้ใช้ชื่อตัวแปรเดียวกันกับชื่อคีย์
คำถามนี้คล้ายกับคำถามข้อหนึ่ง ตัวเลือกหนึ่งก็คล้ายกับตัวเลือกหนึ่ง และต่อไปเช่นนี้
ที่นี่ฉันต้องการให้คุณเน้นว่าตัวเลือกที่มีเส้นใต้แบบถูกต้องนั้นแตกต่างจากตัวเลือกที่ถูกต้อง
ดังนั้น การเพิ่มชื่อที่จัดลำดับควรเป็นคำอธิบายประกอบที่ควรเพิ่ม
ตัวอย่างเช่น หากเราดูตัวเลือกที่สี่ จะคล้ายกับตัวเลือกสำหรับคีย์ที่นี่
ดังนั้นตัวเลือกที่สี่ ฉันสามารถกำจัดคำอธิบายประกอบชื่อแบบอนุกรมได้
ดังนั้นฉันสามารถลบชื่อที่ถูกจัดลำดับได้เพราะตัวเลือกที่สี่ตรงกับตัวเลือกสำหรับคีย์ในคำตอบของ Json
แต่ตัวเลือกที่ถูกต้องไม่ตรงกับตัวเลือกที่ถูกต้องที่นี่ในคีย์
ดังนั้นฉันจำเป็นต้องเพิ่มที่กำกับชื่อที่จัดลำดับ
และฉันจะระบุตัวเลือกที่ถูกต้องภายในที่กำกับชื่อที่จัดลำดับนั้น
นี่คือสิ่งที่ฉันกำลังอ้างถึง
ตัวเลือกที่ถูกต้องนี้ถูกเชื่อมโยงและแมปตัวแปรตัวเลือกที่ถูกต้องนี้กับคีย์นี้
แก้ไขตัวเลือกปุ่มขีดล่างให้ถูกต้อง
อีกครั้งนะครับทุกคน เมื่อคุณมีตัวแปรที่คล้ายกัน ไม่จำเป็นต้องใช้ชื่อที่ผ่านการซีเรียลไลซ์
แต่เพื่อการนำไปใช้ที่ดีขึ้นและเพื่อระบุข้อผิดพลาดที่อาจเกิดขึ้น
กรุณาเก็บชื่อและสัญลักษณ์ที่ถูกซีเรียลไว้
ตอนนี้เรามาเพิ่ม เปิดเผย และสัญลักษณ์กัน
การเพิ่ม, การเปิดเผย และการบันทึกเป็นคำอธิบายประกอบ
Json เช่นกัน แต่จะใช้สำหรับการควบคุมพฤติกรรมของการแปลงข้อมูลฟิลด์เป็นลำดับและการแปลงกลับเป็นลำดับตามค่าเริ่มต้น
เจสัน, ทำการซีเรียลไลซ์และดีซีเรียลไลซ์ทุกฟิลด์ของคลาส แต่หากคุณต้องการยกเว้นฟิลด์เฉพาะจากการซีเรียลไลซ์หรือดีซีเรียลไลซ์ คุณสามารถใช้
Add expose annotation ได้
ในการใช้ Add expose annotation คุณจำเป็นต้องกำหนดค่าอินสแตนซ์
Json ของคุณให้รองรับมัน โดยการสร้างอินสแตนซ์ Json ด้วย
Json builder และกำหนดค่าให้มันยกเว้นฟิลด์ที่มี annotation expose
ดังนั้นฉันสามารถใช้การยกเว้นฟิลด์ด้วยจุดโดยไม่ต้องใช้เมธอด Expose annotation ในตัวสร้าง Json
ได้ แต่ฉันจะไม่ใช้มันในแอปพลิเคชันนี้ เพียงเพื่อแจ้งให้คุณทราบและบอกคุณเกี่ยวกับการเพิ่มเมธอด annotation ชื่อ
serialized และการเพิ่มเมธอด annotation Expose เพื่อให้คุณสามารถยกเว้นพวกมันจากการแปลงกลับหรือแปลงเป็นลำดับได้
เราได้เรียนรู้เกี่ยวกับตัวแปลง Json นี้
เราได้เรียนรู้เกี่ยวกับคำอธิบายประกอบ expose และชื่อที่ถูกจัดลำดับ
ตอนนี้เรามาสร้างชิ้นส่วนสำหรับการปรับปรุงใหม่ส่วนอื่นๆ กัน