Mục đích cơ bản của chú thích @SerializedName trong Android bằng Gson là gì


110

Mục đích cơ bản của @SerializedNamechú thích trong Android bằng Gson là gì?

Cho tôi một số ví dụ khác nhau. Tôi không thể hiểu mục đích chính của việc sử dụng nó.


Javadoc nói gì?
Sotirios Delimanolis

tôi không thể hiểu những gì đang nói?
Muhammad Ali

nó sẽ xác định các indentifier tài sản mà tài sản này thuộc từ các dữ liệu json
Amrut Bidri

1
Bạn có thể thấy phần giải thích này awesome futurestud.io/tutorials/...
Abhishek Kumar

Câu trả lời:


254

Ví dụ về lớp Java,

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

Lớp này có hai trường đại diện cho tên người và ngày sinh của một người. Các trường này được chú thích bằng chú thích @SerializedName . Tham số (giá trị) của chú thích này là tên được sử dụng khi serialisingdeserialisingđối tượng. Ví dụ: trường Java personName được biểu diễn dưới dạng tên trong JSON.

Ví dụ về JSON,

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

2
@MuhammadAli, tôi rất vui được giúp bạn. Bạn cũng có thể cho tôi tín dụng bởi phiếu bầu tán thành và chấp nhận trả lời thân yêu của tôi :)
hack Rathod

3
Những cử tri tiêu cực, vui lòng thêm nhận xét của bạn để tôi có thể hiểu mục đích của việc bỏ phiếu xuống là gì và tôi có thể cải thiện câu trả lời của mình trở đi .. :)
Chintan Rathod

4
Câu trả lời hay .... Đúng vào vấn đề .... Ví dụ với Jsonrất hữu ích
Devrath

Rất vui vì nó đã giúp. :)
Chintan Rathod

1
Thực sự hữu ích!! ; Cảm ơn bạn rất nhiều :) @ChintanRathod
Imran

64

Đã có một số câu trả lời ở đây, nhưng tôi muốn nói thêm rằng nếu bạn đang sử dụng ProGuardđể Giải mã mã của mình và không sử dụng@SerializedName("name") trong lớp mô hình của mình, thì GSON của bạn sẽ không hoạt động. Bởi vì do xáo trộn, tên biến của bạn có thể đã thay đổi từ String namethành String adẫn đến phân tích cú pháp GSON bị hỏng vì GSON sẽ tìm kiếm khóa avào json và nó sẽ thất bại.

Bằng cách chỉ định @SerializedName , GSON sẽ không tìm trong json dựa trên tên biến và sẽ chỉ sử dụng được chỉ định @SerializedName.

Tất nhiên, bạn có thể yêu cầu proguard không làm xáo trộn mô hình của mình, nhưng nếu bạn muốn mô hình bị xáo trộn, thì bạn phải chỉ định @SerializedName


1
Thông tin Gr8, tôi đã từng nói với proguard để không làm xáo trộn các mô hình. Bây giờ, với điều này tôi có thể làm. :)
akashPatra

1
Điều này là rất, rất quan trọng. Mất 2 giờ và đã thêm @SerializedName mọi nơi.
Abhijit Kurane

2

Bạn có thể hướng dẫn Proguard không làm xáo trộn các lớp dữ liệu của mình bằng cách chỉ định @Keep ở trên cùng của lớp. Điều này sẽ không xóa hoặc làm xáo trộn lớp của bạn. Không cần thêm @SerializedName vào từng trường một cách rõ ràng nếu tên trường tương tự với khóa Json đang được sử dụng cho nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.