จุดประสงค์พื้นฐานของคำอธิบายประกอบ @SerializedName ใน Android โดยใช้ Gson คืออะไร


111

วัตถุประสงค์พื้นฐานของ@SerializedNameคำอธิบายประกอบใน Android โดยใช้ Gson คืออะไร?

ขอยกตัวอย่างที่แตกต่างกัน ฉันไม่เข้าใจจุดประสงค์หลักของการใช้งาน


Javadoc พูดว่าอะไร?
Sotirios Delimanolis

ฉันไม่เข้าใจสิ่งที่พูด?
มูฮัมหมัดอาลี

มันจะระบุตัวระบุคุณสมบัติที่คุณสมบัตินี้เป็นของข้อมูล json
Amrut Bidri

1
คุณสามารถดูคำอธิบายที่ยอดเยี่ยมนี้ได้ในอนาคตstud.io/tutorials/…
Abhishek Kumar

คำตอบ:


255

ตัวอย่างคลาส Java

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

คลาสนี้มีสองฟิลด์ที่แสดงถึงชื่อบุคคลและวันเกิดของบุคคล เขตข้อมูลเหล่านี้จะมีคำอธิบายประกอบกับ@SerializedNameคำอธิบายประกอบ พารามิเตอร์ (ค่า) ของคำอธิบายประกอบนี้คือชื่อที่จะใช้เมื่อserialisingและdeserialisingวัตถุ ตัวอย่างเช่นpersonNameฟิลด์ Java จะแสดงเป็นชื่อใน JSON

ตัวอย่าง JSON

{
    "name":"chintan",
    "bd":"01-01-1990"
}

2
@MuhammadAli ยินดีที่ได้ช่วยเหลือคุณ คุณสามารถให้เครดิตฉันด้วยการโหวตและยอมรับคำตอบที่รักของฉัน :)
Chintan Rathod

3
ผู้มีสิทธิเลือกตั้งเชิงลบโปรดเพิ่มความคิดเห็นของคุณเพื่อที่ฉันจะได้เข้าใจว่าอะไรคือจุดประสงค์ของการโหวตลงและฉันจะได้ปรับปรุงคำตอบของฉันเป็นต้นไป .. :)
Chintan Rathod

4
ตอบดี .... ตรงประเด็น .... ตัวอย่างมีJsonประโยชน์
Devrath

ดีใจที่มันช่วย :)
Chintan Rathod

1
เป็นประโยชน์จริงๆ !! ; ขอบคุณมาก :) @ChintanRathod
Imran

65

มีคำตอบอยู่สองสามคำที่นี่ แต่ฉันอยากจะเพิ่มว่าถ้าคุณใช้ProGuardเพื่อทำให้โค้ด@SerializedName("name")สับสนและไม่ได้ใช้ในคลาสโมเดลของคุณ GSON ของคุณจะไม่ทำงาน เนื่องจากความสับสนชื่อตัวแปรของคุณอาจเปลี่ยนจากString nameเป็นString aส่งผลให้การแยกวิเคราะห์ GSON เสียเนื่องจาก GSON จะมองหาคีย์aใน json และจะล้มเหลว

โดยการระบุ@SerializedName, GSON จะไม่มองใน JSON @SerializedNameตามชื่อตัวแปรและจะใช้เพียงระบุ

แน่นอนว่าคุณสามารถบอกให้ proguard ไม่ทำให้โมเดลของคุณสับสน แต่ถ้าคุณต้องการให้โมเดลมีความสับสนคุณต้องระบุ @SerializedName


1
ข้อมูล Gr8 ฉันเคยบอก proguard ว่าอย่าทำให้โมเดลสับสน ตอนนี้ด้วยสิ่งนี้ฉันสามารถทำได้ :)
akashPatra

1
สิ่งนี้สำคัญมาก หายไป 2 ชั่วโมงและได้เพิ่ม @SerializedName ทุกที่
Abhijit Kurane

2

คุณสามารถสั่งให้ Proguard ไม่ทำให้คลาสข้อมูลของคุณสับสนได้โดยระบุ @Keep ไว้ที่ด้านบนของคลาส สิ่งนี้จะไม่ลบหรือทำให้ชั้นเรียนของคุณสับสน ไม่จำเป็นต้องเพิ่ม @SerializedName ในแต่ละฟิลด์อย่างชัดเจนหากชื่อฟิลด์นั้นคล้ายกับคีย์ Json ที่ใช้อยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.