Xin chào kotlin serialization, tạm biệt gson là gì, làm việc với gson trong android

Ở bài viết này chúng ta đang mày mò biện pháp sử dụng chi tiết với các công dụng mà lại Gson đem lại đến chúng ta hoàn hảo nhất thế nào.Bài viết mặc dù hơi lâu năm dẫu vậy tôi đã nỗ lực việt hóa tương đối nhiều từ bỏ khóa

*

Thật thuận lợi bắt buộc không đa số người.

Bạn đang xem: Xin chào kotlin serialization, tạm biệt gson là gì, làm việc với gson trong android

3.2 Đối tượng lồng nhau thì làm cho nỗ lực làm sao ?

Ta gồm một tấm Address nhỏng bên dưới:

public class Address private String street; private String houseNumber; private String city; private String country; public Address(String street, String houseNumber, String đô thị, String country) this.street = street; this.houseNumber = houseNumber; this.city = city; this.country = country; public class NestedObject private String name; private String email; private int age; private boolean isDeveloper; private Address address; public NestedObject(String name, String email, int age, boolean isDeveloper, Address address) this.name = name; this.email = email; this.age = age; this.isDeveloper = isDeveloper; this.address = address; Bắt đầu triển khai nào!!!

Address address = new Address("ly thuong kiet", "tang 4 FHome", "Da Nang", "Viet Nam");NestedObject nestedObject = new NestedObject("anh", "", 22, true, address);String result = new Gson().toJson(nestedObject);Quý khách hàng khoan hãy chú ý hiệu quả cùng hãy trường đoản cú tưởng tượng demo làm sao !

*
Tại phần trên chúng ta vẫn thấy hiệu quả là nó sẽ parse nguyên một đối tượng người dùng lịch sự json vậy thì hiện giờ gồm thêm 1 đối tượng bên trong sẽ như thế nào?Và đây:

"userAddress": "city": "Da Nang", "country": "Viet Nam", "houseNumber": "tang 4 FHome", "street": "ly thuong kiet" , "age": 22, "email": "", "isDeveloper": true, "name": "anh"Wow. thiệt tuyệt vời nhất.

*
Phần gửi trường đoản cú json trờ lại đối tượng người dùng ko không giống gì phần trước các bạn tự kiểm soát nhé :

Gson gson = new Gson();NestedObject nestedObject = new Gson().fromJson(json, NestedObject.class);

3.3 Chuyển đảo qua lại của Array cùng List các Object:

Trong java có rất nhiều phương pháp để lưu trữ hình trạng dữ liệu list. Nhưng tại chỗ này họ đề cập đến 2 từ thời điểm cách đây là Array và List. Mỗi chiếc sẽ có sự không giống nhau riêng vào Việc parse qua json.Trong định hình của json thì nó không có định nghĩa array với list. Vậy chỉ bao gồm sự biệt lập nằm ở vị trí phía java. Vậy hiện giờ bọn họ hãy đi so sánh bọn chúng sang một vài ví dụ dưới nhé.Chuyển đổi đối tượng quý phái jsonCả array với các mục những tựa như như nhau nhé.

public class MenuItem private String description; private float price; public MenuItem(String mô tả tìm kiếm, float price) this.description = description; this.price = price; Tạo một tấm Restaurant với 1 List những đối tượng người sử dụng MenuItem

public class Restaurant private String name; private List menuItems; public Restaurant(String name, List menuItems) this.name = name; this.menuItems = menuItems; Xem tác dụng nào

List menuItems = new ArrayList(); menuItems.add(new MenuItem("egg", 12.5f)); menuItems.add(new MenuItem("chicken", 2.5f)); menuItems.add(new MenuItem("vegetable", 7.5f)); menuItems.add(new MenuItem("pig", 11.55f)); Restaurant thực đơn = new Restaurant("toàn quốc Food", menuItems); String json = new Gson().toJson(thực đơn, Restaurant.class);Cùng xem hiệu quả nào:

"menu": < "description": "egg", "price": 12.5 , "description": "chicken", "price": 2.5 , "description": "vegetable", "price": 7.5 , "description": "pig", "price": 11.55 >, "name": "cả nước Food"Thđọng trường đoản cú thuộc tính nó sắp xếp theo thiết bị từ bảng chữ cái nhé chúng ta.

**Chuyển đổi json thanh lịch đối tượng người sử dụng **

Ví dụ tất cả một tệp tin json như thế này:

< "name": "Hoa Hong", "count": 1 , "name": "Hoa Lan", "count": 3 , "name": "Hoa Mai", "count": 2 >Ta gồm một class tương xứng với json nlỗi sau:

public class Flower
SerializedName("count") private int mCount;Trường vừa lòng 1: Ta ước ao trả về 1 mảng các đối tượng.

// tệp tin json tôi đã nhằm mặt trênFlower<> flowers = new Gson().fromJson(json, (Type) Flower<>.class);Trường đúng theo 2: Ta ý muốn trả về 1 các mục những đối tượngChúng ta cần thiết trực tiếp parse ra list những đối tượng từ bỏ json. Để đến Gson gọi cấu tạo List kia các bạn bắt buộc chỉ ra rằng đẳng cấp của nó.Thật là suôn sẻ. Gson tất cả một tấm TypeToken sẽ giúp bọn họ kiếm tìm đúng vẻ bên ngoài của tài liệu.

// tệp tin json giống như như bên trên nhé chúng ta.Gson gson = new Gson();Type flowerList = new TypeToken>().getType();List founderList = gson.fromJson(json, flowerList); Các bạn hãy từ bỏ test bình chọn nhé.

Question:Mình suy nghĩ chắc hẳn hiện nay các bạn đang phát sinh vào đầu một thắc mắc "file json là 1 trong những đối tượng người tiêu dùng bao gồm cất một list cống phẩm thì sao".Câu vấn đáp là ko thành vụ việc so với Gson nhé các bạn. Nó có thể parse trực tiếp ra cơ mà không bắt buộc TypeToken nào. Thật là tiện lợi yêu cầu ko các bạn.

Xem thêm: Làm Sao Để Tải Paint Tool Sai 2 2021, Painttool Sai

3.4 Chuyển đổi quý giá null thì sao nhỉ?

User user = new User(null, "", 22, true);String json = new Gson().toJson(user); // ??Đối cùng với rất nhiều thuộc tính có giá trị null thì Gson đang bỏ qua mất.Kết quả:

"age":22,"email":"","isDeveloper":trueThế json giả dụ như không có ở trong tính hệt như đối tượng người tiêu dùng thì đã như thế nào

Câu trả lời là nó sẽ về quý giá mặc định theo từng loại dữ liệu. String là null, int là 0... Nếu còn thắc mắc về vấn đề đó mình khulặng chúng ta bắt buộc xem xét lại các loại đổi thay trong java.

3.5 Tgiỏi thay tên những trường cho tương xứng cùng với json

Tại các ví dụ bên trên mình đã nhằm key của các field vào json là tên gọi thay đổi của lớp luôn luôn. Điều kia thì hết sức bất tiện

trang bị nhất: về Code Style sẽ không đúng chuẩn

private String name;//replace by
SerializedName(value = "name")private String mName;Wow. Giờ thì đúng mực cơm trắng chị em thổi nấu rồi nhé.

*

Ở trên đây bản thân tất cả một ngôi trường hòa hợp phòng hờ cho chúng ta, ví như nlỗi phía API vày một nguyên nhân làm sao kia cùng trả về đối tượng người sử dụng đó tuy vậy tên field của thuộc tính có chút biến hóa để tương xứng về phương diện ngữ nghĩa của phía Backend. Thì phía họ cần thiết làm sao rước được giá trị đó nên ko làm sao (phần 3.4) mình có đề cập tới vụ việc này rồi nhé. Nhắc lại là nó đã trả về nằm trong tính của đối tượng là null nếu như không tồn tại field trùng tên cùng với
SerializedName() tôi đã đặt nhé.

Các giải quyết là Gson cung cấp mang lại ta một trực thuộc tính sửa chữa thay thế alternate


SerializedName(value = "name", alternate = "other_name")Vậy là 1 trong bài toán trsống đề xuất đơn giản rồi nhé.

3.6 Cách bỏ qua sự biến đổi của các field

Lại là một trong vụ việc tốt nữa, chắc chắn một số bạn new tìm hiểu khi hiểu code của fan khác vẫn vướng mắc tự khóa transient cùng
Expose là gì nên không?Thì trên đây đó là trường đoản cú khóa nhằm giải quyết và xử lý vấn đề nêu trêntransient

private boolean transient mIsDeveloper;Sẽ cần yếu như thế nào chuyển đổi hỗ tương giữa đối tượng người tiêu dùng cùng json đối với nằm trong tính này của User nhé các bạn
Expose
Tương từ bỏ nlỗi transient dẫu vậy nó tất cả sự thiết lập phải hết sức dễ dàng. Mình sẽ lý giải vào code bên dưới nhé


Expose() // Đây là hình trạng khoác định cùng cho phép thực hiện cả nhì sự thay đổi // vấn đề các bạn thêm 2 tmê mệt số (serialize = true, deserialize = true) thì cũng giống như vậy // và sẽ sở hữu lời nói trường đoản cú IDE là hãy xóa đi
SerializedName("isDeveloper") private boolean mIsDeveloper; // not serializeChưa hoàn thành đâu các bạn ạ, nếu như sẽ áp dụng
Expose thì phải nói cho Gson nó biết là bản thân cần sử dụng đặc điểm này nữa

*
Y chang tựa như những ví dụ sinh hoạt trên nhưng vấn đề khởi tạo Gson tất cả khác một ít nhé.

Gson gson = new Gson(); // thay thế sửa chữa vị Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();GsonBuilder là 1 vẻ bên ngoài Design Patterns - Builder Pattern. Nó góp khởi chế tác một đối tượng người dùng Gson bằng phương pháp gán quý hiếm mang lại từng nằm trong tính của đối tượng người sử dụng.

Vậy là hiện giờ nó vẫn thao tác rồi kia các bạn!

3.7 Tùy chỉnh đối tượng người dùng gson của chúng ta.

Có rất nhiều vẻ bên ngoài tùy chỉnh cấu hình đến gson, Khi các bạn kết phù hợp với retrofit thì câu hỏi tùy chỉnh thiết lập vẫn sảy ra siêu liên tiếp.Ở phía trên bản thân có một ví dụ nhỏ tuổi về tùy chỉnh:

Gson gson = new GsonBuilder().serializeNulls().create();Ở phía trên mình cũng khởi tạo ra một đối tượng người tiêu dùng Gson bởi builder nlỗi ngơi nghỉ bên trên nhé.Các chúng ta đã biết là cùng với những quý hiếm null thì mặc định Gson sẽ không còn đổi khác nhưng với một đối tượng người dùng gson đang đổi khác nlỗi trên thì câu hỏi đó không thể đúng nữa đó. Nó sẽ tạo ra field khớp ứng với value bởi null đấy.

3.8 Others

Kiến thức về Gson thì cực kỳ những. Việc bọn họ sẽ học ở đây nhằm hoàn toàn có thể triển khai đều việc thường chạm mặt vào quy trình lập trình sẵn cơ mà thôi nhé các bạn.Nếu trong một vài ngôi trường đúng theo quan trọng thì bản thân xin lời khuyên các bạn thêm 1 vài phần nữa về Gson:

Mappings of MapMappings of Set.Gson with LenientVân vân và mây mây nữa nhé những bạn!4. Summary

Thật là những kỹ năng đề xuất ko các bạn. Mình cũng rất cảm ơn chúng ta sẽ phát âm tới đây. Và mong mỏi các bạn sẽ nắm bắt được hồ hết điều cần thiết thiết sau :

Cách parse object lớn json cùng ngược lại. Cách chuyển đổi đối với phần nhiều đối tượng người dùng lồng nhau. Sự biệt lập giữa biến đổi tài liệu áp dụng Array cùng List. Sử dụng hầu hết annoutation nhằm các bước hiệu quả rộng. Tùy chỉnh đối tượng gson mang lại phù hợp cùng với ước muốn của chúng ta.Với rất nhiều kỹ năng bản thân nêu sinh sống trên khôn xiết ao ước sẽ có ích cùng với chúng ta. Nếu gồm thắc mắc hoặc bất kỳ câu hỏi, chủ ý đóng góp nàoxin gần như tín đồ hãy để lại dưới. Rất muốn sự đóng góp của doanh nghiệp để bài viết được hoàn thành rất tốt.Xin cảm ơn.