Tôi cần triển khai thực hiện tuần tự hóa JSON cho một số đối tượng và tôi đã gặp sự cố khi tích hợp với các bộ sưu tập chung.Tuần tự hóa JSON JSON - thực hành tốt nhất
Tất cả các lớp serializable thực hiện giao diện này (JSONObject đến từ this thư viện):
interface JSONSerializable{
public JSONObject dump() throws JSONException //serializes object
public void load(JSONObject obj) throws JSONException //deserializes object
}
Mã cho bộ sưu tập của tôi dựa trên java.util.List trông nhiều hơn hoặc ít hơn như thế này:
class AwesomeList<T extends JSONSerializable> implements JSONSerializable{
private LinkedList<T> items = new LinkedList<T>();
...
...
public JSONObject dump() throws JSONException {
JSONObject result = new JSONObject();
JSONArray a = new JSONArray();
for(T i : items){
a.put(i.dump());
}
result.put("items", a);
return result;
}
public void load(JSONObject obj) throws JSONException{
//here is my problem
}
}
Vấn đề của tôi là: Khi tôi tải AwesomeList từ JSONObject, tôi cần tạo các phần tử của nó nhưng không thể vì java cấm tôi viết
T newItem = new T();
newItem.load(obj);
Tôi nên sửa đổi cách tiếp cận của mình đối với tác vụ này như thế nào?
Thành thật mà nói tôi không thấy cách làm việc này với thậm chí biết loại. Bạn có lưu trữ tên lớp trong gói dữ liệu JSON không? – Perception
Không, mọi đối tượng đều biết cách tải chính nó từ JSONObject (thực ra chỉ là mảng kết hợp). Tôi đã cập nhật bài đăng để hiển thị những gì tôi muốn làm. – KCH