“โอเค อย่างที่คุณน่าจะเดาได้แล้วว่านั่นไม่ใช่ทั้งหมด”
"ตอนนี้ฉันจะบอกคุณเกี่ยวกับแง่มุมอื่นๆ ของ JAXB แต่อย่างที่เราทำกับ JSON เราจะเริ่มต้นด้วยการรวบรวม"
"เมื่อ deserializing คอลเล็กชันโดยใช้ JAXB ยังมีความไม่แน่นอนเกี่ยวกับคอลเล็กชันเฉพาะ (ArrayList, LinkedList, Vector ฯลฯ) ที่จะใช้สำหรับตัวแปร List และอีกครั้งที่คำตอบสำหรับคำถามนี้มีให้โดยคำอธิบายประกอบ"
"ทุกอย่างค่อนข้างเรียบง่ายหากไม่ได้ระบุประเภทคอลเล็กชันไว้ในคำอธิบายประกอบ JAXB จะพยายามเลือกคอลเล็กชันที่เหมาะสมที่สุดโดยใช้ประเภทสำหรับรายการ จะเป็น ArrayList สำหรับแผนที่ จะเป็น HashMap เป็นต้น "
"ในความเป็นจริง มีปัญหาน้อยกว่า JSON เนื่องจากแต่ละคลาสมีแท็กที่ไม่ซ้ำกัน และคุณสามารถใช้แท็กเพื่อระบุคลาสที่แน่นอนได้"
"ตัวอย่างเช่น ถ้าคุณต้องการยกเลิกการซีเรียลไลซ์กลุ่มขององค์ประกอบที่สืบทอดบรรพบุรุษร่วมกัน ให้ใช้ @XmlAny: annotation"
public static void main(String[] args) throws JAXBException
{
String xmldata = "<zoo><cat/><cat/><dog/><cat/></zoo>";
StringReader reader = new StringReader(xmldata);
JAXBContext context = JAXBContext.newInstance(Cat.class, Zoo.class, Dog.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Cat cat = (Cat) unmarshaller.unmarshal(reader);
}
@XmlType(name = "zoo") @XmlRootElement class Zoo { @XmlAny รายการ สาธารณะ <Object> สัตว์; } @XmlType(name = "cat") @XmlRootElement class Cat { ชื่อสตริงสาธารณะ ; อายุสาธารณะ ; น้ำหนัก int สาธารณะ ; แมว () { } } @XmlType(name = "dog") @XmlRootElement class Dog { ชื่อสตริงสาธารณะ ; อายุสาธารณะ ; น้ำหนัก int สาธารณะ ; แมว () { } }
"หากคอลเลกชันถูกทำเครื่องหมายด้วย คำอธิบาย ประกอบ @XmlAnyก็สามารถใส่วัตถุใดๆ ที่เหมาะสมลงไปได้ และ JAXB Unmarshallerจะให้ความสำคัญกับแท็กเมื่อสร้างคอลเลกชัน"
"ในกรณีนี้ ลำดับของแท็ก " <zoo> <cat/><cat/> <dog/> <cat/> </zoo> " จะถูกแปลงเป็นคอลเลกชันที่มีวัตถุ Cat, Cat, Dog และ Cat "
"นั่นคือสิ่งที่ฉันคาดหวัง"
"อ๊ะ อ้อ อีกเรื่องหนึ่ง หากคุณยกเลิกการซีเรียลไลซ์ข้อความและแท็กผสมกัน คุณต้องใช้คำอธิบายประกอบ@XmlMixed "
"นี่คือตัวอย่างของ XML ประเภทนี้:"
<data> <items> ทดสอบ 1 <item/> ข้อความ 2 <item> ชื่อ </item> ข้อความ 3 </items> </data>
"ว้าว ฉันลืมไปเลยว่ามี XML แบบนี้อยู่ ฉันเคยชินกับทุกสิ่งที่สวยงาม แท็กแบบฝัง และอื่นๆ อีกมากมาย"
"มันมีอยู่จริง และ JAXB ก็มีคำอธิบายประกอบสำหรับกรณีนี้ด้วย!"
"เยี่ยมมาก ฉันอยากจะถามว่า enums ได้รับการทำให้เป็นอนุกรมอย่างไร"
"เป็นคำถามที่ดี! น่าสนใจดี! ฉันข้ามหัวข้อนั้นไป"
"มีคำอธิบายประกอบ @XmlEnum พิเศษที่ต้องใช้เพื่อทำเครื่องหมาย enums คุณสามารถใช้เพื่อระบุว่าค่าจะถูกจัดเก็บเป็นตัวเลขหรือสตริง"
"นอกจากนี้ยังมีคำอธิบายประกอบ @XmlEnumValue ที่ให้คุณระบุค่าที่จะสอดคล้องกับฟิลด์ enum เฉพาะ"
"นี่คือตัวอย่างบางส่วน:"
ตัวเลข | สตริง |
---|---|
|
|
"Holy moly ฉันนึกไม่ออกว่าต้องใช้สิ่งนี้ที่ไหน แต่ฉันคิดว่ามันมีประโยชน์มาก และที่สำคัญที่สุดคือ ฉันไม่ต้องยึดติดกับสตริงมาตรฐานหรือค่าตัวเลข"
"ใช่ สิ่งนี้มีประโยชน์ ตัวอย่างเช่น เมื่อคุณเขียนโปรแกรมที่แลกเปลี่ยนข้อความกับเซิร์ฟเวอร์ของ Facebook และพวกเขาก็มีชุดค่าที่กำหนด คุณเพียงแค่กำหนดให้กับ enum ของตัวเอง แล้วทุกอย่างก็จะทำงาน "
"มันยอดเยี่ยมมาก ฉันชอบ JAXB อย่างแน่นอน"
"ดี งั้นก็แค่นี้สำหรับวันนี้ ไปพักเถอะ"
GO TO FULL VERSION