ฉันได้เขียนซีเรียลไลเซอร์ของตัวเองโดยใช้แจ็คสัน ใช้ตัวแปรหรือคลาสและส่งกลับค่าประเภทธรรมดาใดๆ
ตัวอย่าง: serialize(new MyClass(2.0)) จะส่งกลับ double ด้วยค่า 2.0 โดยที่ MyClass มีลักษณะดังนี้:
public class MyClass {
private double number;
public MyClass(double number) {
this.number = number;
}
@JsonValue
public double getNumber() {
return number;
}
}
ดังนั้นเพื่อให้ได้ค่าที่ถูกต้อง ฉันต้องตั้งค่า @JsonValue อย่างไรก็ตาม เมื่อฉันซีเรียลไลซ์อ็อบเจ็กต์ เช่น UUID ซึ่งไม่มีคำอธิบายประกอบ @JsonValue ก็จะส่งคืนสตริง UUID ที่คาดหวัง
การสร้างคลาสของฉันเองไม่มีคำอธิบายประกอบ @JsonValue ไม่มีผลเช่นเดียวกัน ในกรณีนี้ ทำให้เป็นอนุกรม(new MayClass(2.0)) ส่งคืนแผนที่ {"number":2.0} โดยที่ MyClass มีลักษณะดังนี้:
public class MyClass implements Serializable, Comparable<MyClass> {
private double number;
public MyClass(double number) {
this.number = number;
}
public double getNumber() {
return number;
}
@Override
public int compareTo(MyClass obj) { return 0; }
}
คำถามของฉันคือเหตุใด UUID (และคลาสที่ทำให้ซีเรียลไลซ์ที่กำหนดไว้ล่วงหน้าอื่น ๆ ) ทำให้ซีเรียลไลซ์ตามที่คาดไว้ แต่คลาสที่ทำให้ซีเรียลไลซ์ของฉันเองกลับไม่ทำ นอกจากนี้ ฉันจะทำให้คลาสที่ทำให้ซีเรียลไลซ์ได้เป็นซีเรียลไลซ์อย่างถูกต้องได้อย่างไร