programing

Gson을 사용하는 Android에서 @SerializedName 주석의 기본 목적은 무엇입니까?

bestcode 2022. 9. 5. 23:02
반응형

Gson을 사용하는 Android에서 @SerializedName 주석의 기본 목적은 무엇입니까?

의 기본 목적은 무엇입니까?@SerializedNameGson을 사용하여 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 aGSON이 키를 찾기 때문에 GSON 파싱이 중단됩니다.ajson으로 변환하면 실패합니다.

지정함으로써@SerializedNameGSON은 변수 이름에 따라 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

반응형