Gson을 사용하는 Android에서 @SerializedName 주석의 기본 목적은 무엇입니까?
의 기본 목적은 무엇입니까?@SerializedName
Gson을 사용하여 Android에서 주석을 달 수 있습니까?
다른 예를 들어주세요.나는 그것을 사용하는 주된 목적을 이해할 수 없다.
Java 클래스의 예,
public class Person {
@SerializedName("name")
private String personName;
@SerializedName("bd")
private String birthDate;
}
이 클래스는 사람의 이름과 생년월일을 나타내는 두 개의 필드가 있습니다.이러한 필드에는 @SerializedName 주석이 붙어 있습니다.이 주석의 파라미터(값)는 다음 경우에 사용되는 이름입니다.serialising
그리고.deserialising
물건들.예를 들어 Java 필드 personName은 JSON에서 이름으로 표시됩니다.
JSON의 예,
{
"name":"chintan",
"bd":"01-01-1990"
}
여기에는 이미 몇 가지 답변이 있습니다.그러나 만약 당신이 그것을 사용하고 있다면 덧붙이고 싶습니다.ProGuard
코드를 난독화하여 사용하지 않도록 합니다.@SerializedName("name")
모델 클래스에서는 GSON이 작동하지 않습니다.왜냐하면 난독화로 인해 변수 이름이String name
로.String a
GSON이 키를 찾기 때문에 GSON 파싱이 중단됩니다.a
json으로 변환하면 실패합니다.
지정함으로써@SerializedName
GSON은 변수 이름에 따라 json을 검색하지 않고 지정된 이름만 사용합니다.@SerializedName
.
물론 프로가드에게 모델을 난독화하지 않도록 지시할 수 있지만 모델을 난독화하려면@SerializedName
@SerializedName을 사용하면 서버로부터 콜백을 수신할 때, 즉 Json 포맷을 파서에 통지할 수 있습니다.
{
"name":"John Doe",
}
오브젝트의 시리얼화 또는 시리얼화를 해제할 때 다음 이름을 가진 키를 검색하는 대신 다음과 같이 설정합니다.Json 응답에서 "userName"을 클릭하여 "name"을 검색합니다.
@SerializedName("name")
var userName: String,
멤버를 원하는 모델이 있을 수 있기 때문에 좋습니다.
@Keep on class를 지정하여 Proguard에 데이터 클래스를 난독화하지 않도록 지시할 수 있습니다.이렇게 해도 클래스가 삭제되거나 흐트러지지 않습니다.필드 이름이 사용되는 Json 키와 유사한 경우 각 필드에 @SerializedName을 명시적으로 추가할 필요가 없습니다.
예를 들어 실제 시나리오에서는 백엔드 개발에서 API 요청에 대한 응답을 얻을 수 있습니다.
{
"name":"John Doe",
"id":"1478"
}
이를 처리하기 위해 만든 데이터 클래스에서 백엔드에서 가져오는 필드 "name" 및 "id"에 대해 Android 측에서 다른 변수 이름을 지정할 수 있습니다.
@SerializedName은 여기서 구조합니다.
@SerializedName의 백엔드에서 취득하는 실제 키 값(시리얼라이즈 및 역시리얼라이즈에 사용)을 지정하기만 하면 동작에서 수신한 값을 저장하는 변수 이름을 사용할 수 있습니다.
예를 들어 앞에서 설명한 JSON의 데이터 클래스는 다음과 같습니다.
data class User(
@SerializedName("name") val userName: String,
@SerializedName("id") val userId: Int
)
여기서 id는 백엔드 키이므로 @SerializedName에서 사용됩니다.그러나 이러한 값을 저장하기 위해 userName, userId를 사용했습니다.
언급URL : https://stackoverflow.com/questions/28957285/what-is-the-basic-purpose-of-serializedname-annotation-in-android-using-gson
'programing' 카테고리의 다른 글
원인: org.flywaydb.core.api.Flyway Exception:검증에 실패했습니다.마이그레이션 2에 대한 마이그레이션 체크섬 불일치 (0) | 2022.09.05 |
---|---|
Vue: 등록하기 전에 vuex 스토어에서 사용자 설정 (0) | 2022.09.05 |
어떻게 하면 PHP 타입 힌트에서 "캐치 가능한 치명적인 오류"를 잡을 수 있을까요? (0) | 2022.09.05 |
java 로그인 사용자 이름 (0) | 2022.09.05 |
휴지 상태:MyISAM 대신 Mysql InnoDB 테이블 생성 (0) | 2022.09.05 |