ฉันมีรหัสห้องสมุดบางส่วนที่ฉันต้องทำให้เป็นอนุกรม ฟิลด์หนึ่งถูกกำหนดให้เป็นอินเทอร์เฟซ Foo ซึ่งเป็นเพียงอินเทอร์เฟซของมาร์กเกอร์ รหัสไคลเอ็นต์ควรสร้าง Enum ที่ใช้ Foo
เพื่อให้สามารถขยายรายการประเภทย่อยได้ตามต้องการ
ฉันไม่สามารถทำให้สิ่งนี้เป็นอนุกรมใน Gson ด้วยอะแดปเตอร์ประเภทได้ ข้อยกเว้นที่ฉันได้รับคือ:
java.lang.IllegalStateException: ไม่ใช่วัตถุ JSON: "SETUP"
โดยที่การตั้งค่าเป็นองค์ประกอบหนึ่งของการระบุไคลเอ็นต์ Bar
ฉันได้เพิ่ม TypeAdapter
ที่กำหนด Foo
เป็น supertype และ Bar
เป็นประเภทย่อย โดยใช้รหัส Gson RuntimeTypeAdapter
(ตัวช่วย Gson จาก Google) มีความคิดเห็นเกี่ยวกับสิ่งที่ฉันทำผิดหรือ Gson ไม่รองรับโครงสร้างประเภทนี้
ฉันเชื่อว่าฉันสามารถแก้ไขได้โดยทำให้ Foo
เป็นคลาสนามธรรมและ Setup
เป็นคลาสย่อย แต่นั่นก็ไม่ค่อยดีนักเนื่องจาก enum เป็นเพียงโทเค็นจริงๆ