Sirialisasi XML membolehkan pembangun menukar objek kepada XML atau menyahsiri XML menjadi objek. Apabila cuba untuk mensirikan objek yang mengandungi sifat jenis antara muka, anda mungkin menghadapi ralat disebabkan oleh batasan yang wujud dalam siri deklaratif.
Dalam contoh yang disediakan, kelas Contoh mempunyai sifat jenis IModelObject, iaitu antara muka. Apabila cuba mensirikan tika kelas ini, anda akan menghadapi ralat yang menyatakan bahawa sifat itu tidak boleh disiri kerana ia adalah antara muka.
Memandangkan antara muka tidak boleh disiri secara langsung, kami memerlukan pendekatan alternatif.
1. XmlAttributeOverrides and Abstract Types
Walaupun penyiaran XML tidak menyokong antara muka bersiri secara asli, anda boleh menggunakan XmlAttributeOverrides dan kelas abstrak untuk mencapai kesan yang serupa. Walau bagaimanapun, ini memerlukan menggantikan antara muka dengan jenis abstrak atau konkrit dan menggunakan warisan dengan anotasi XMLInclude, yang boleh dirasakan seperti penyelesaian yang menyusahkan.
2. Kelas Pembungkus XmlAnything
Penyelesaian yang lebih mantap ialah mencipta kelas pembungkus yang melaksanakan IXmlSerializable. Dengan cara ini, anda mendapat kawalan sepenuhnya ke atas proses bersiri dan penyahserilan serta boleh menampung antara muka dengan menukarnya kepada jenis tertentu dalam pembungkus.
3. Harta Sandaran Tersembunyi
Pilihan lain ialah menyembunyikan sifat antara muka dengan sifat sandaran yang boleh disiri dan mengekalkan sifat berasingan untuk menangani nilai jenis antara muka. Pendekatan ini mengelakkan penyelesaian buruk warisan tetapi memperkenalkan kerumitan tambahan untuk penyelenggaraan harta.
4. Sembunyikan dan Uruskannya Kemudian
Sebagai alternatif, anda boleh melaksanakan sifat getter sahaja untuk antara muka yang melakukan penukaran jenis yang diperlukan. Walau bagaimanapun, ini hanya berfungsi jika anda tidak perlu melakukan operasi penyahserikatan untuk sifat antara muka.
Akhirnya, penyelesaian terbaik bergantung pada keperluan khusus aplikasi anda. Jika anda memerlukan fleksibiliti dan kawalan ke atas penyirian, pertimbangkan untuk menggunakan IXmlSerializable atau kelas pembalut XmlAnything. Jika anda lebih suka pendekatan yang lebih ringkas dengan boilerplate minimum, kaedah sifat sokongan tersembunyi mungkin sudah memadai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensiri Sifat Antara Muka dalam XML?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!