برای اینکه یک فیلد سریالایز و دیسریالایز نشود، دو روش وجود دارد:
1. اون فیلد رو transient تعریف کنیم. اینجوری:
private transient Boolean isDeveloper;
در این صورت این فیلد در سریالایز وجود نخواهد داشت و در دیسریالایز حتا اگر در جیسون مقدار داشته باشد اما نال خواهد گرفت.
2. روش بهتر که استفاده از انوتیشن Expose است.
@Expose(serialize = true, deserialize = false)
private String email;
اینجا میگیم سریالایز بشه ولی دیسریالایز نشه. البته میشه آرگومان این انوتیشن رو خالی گذاشت. در این صورت هر دو کار انجام میشه.
هنگام استفاده از این انوتیشن Gson باید اینجوری تعریف شه:
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
نکته: با این روش تعریف Gson، اگر فیلدی انوتیشن Expose رو نداشته باشه، سریالایز و دیسریالایز نخواهد شد.
انوتیشن SerializedName:
این انوتیشن اسامی فیلدها رو در سریالایزر و دیسریالایزر تغییر میده. اینجوری استفاده میشه:
public class User {
@SerializedName("full_name")
private String name;
private String email;
private int age;
private Boolean isDeveloper;
public User(String name, String email, int age, Boolean isDeveloper) {
this.name = name;
this.email = email;
this.age = age;
this.isDeveloper = isDeveloper;
}
}
اگر متد سریالایز به صورت زیر باشد:
private void serialize() {
User user = new User(
"Maryam",
"Maryamflower111@yahoo.com",
28,
null
);
Gson gson = new Gson();
String s = gson.toJson(user);
}
سورس جیسونی که قراره دیسریالایز بشه:
در اکوسیستم Json تفاوتی بین آرایه و لیست وجود نداره.
تو این قسمت یه فیلد به کلاس مدل اضافه میکنم، به این صورت:
دو تا اصطلاح زیر در GSON وجود داره:
serialize: تبدیل شی جاوا به JSON
deserialize: تبدیل JSON به شی جاوا
از کتابخونه GSON برای map کردن یک شی جاوایی به JSON و برعکس (یعنی پارس کردن JSON) استفاده میشه.
این کتابخونه مخصوصا در پارس کردن jsonهایی با اشیای تو در تو (nested) کارها رو خیلی ساده میکنه و استفاده ازش توصیه میشه.
از GSON علاوه بر اندروید، در جاوا هم میشه استفاده کرد.