Pensiri XML: Melumpuhkan Pemberian Elemen Akar dalam Tatasusunan
Pensirian ialah proses penting dalam pembangunan perisian, membolehkan objek ditukar menjadi format berterusan seperti XML. Walau bagaimanapun, ada kalanya anda mungkin ingin mengubah suai gelagat penyirian, seperti melumpuhkan pemaparan elemen akar untuk koleksi.
Melumpuhkan Penyajian Elemen Akar
Pertimbangkan kelas yang mewakili item kedai dengan kedua-dua nama produk dan senarai varian. Secara lalai, siri menggunakan anotasi XML seperti [XmlRoot] dan [XmlArrayItem] menghasilkan XML berikut:
<SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <Variants> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </Variants> </SHOPITEM>
Walau bagaimanapun, anda mungkin ingin menghapuskan elemen Varian sama sekali. Untuk mencapai ini, gantikan atribut [XmlArrayItem] dengan [XmlElement] dalam kod anda. Ini mengarahkan penyeri bersiri untuk menjadikan varian sebagai anak langsung unsur akar SHOPITEM.
<SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </SHOPITEM>
Mengalih keluar Ruang Nama
Anda juga mungkin melihat kehadiran xsi dan xsd ruang nama dalam elemen akar. Jika mahu, anda boleh mengalih keluar ruang nama ini dengan mencipta contoh XmlSerializerNamespaces dengan ruang nama kosong dan membekalkannya semasa penyirian.
Kod Contoh
Contoh berikut menunjukkan yang diterangkan pengubahsuaian:
[XmlRoot("SHOPITEM")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlElement("VARIANT")] // was [XmlArrayItem] public List<ShopItem> Variants { get; set; } } // ... ShopItem item = new ShopItem() { ProductName = "test", Variants = new List<ShopItem>() { new ShopItem{ ProductName = "hi 1" }, new ShopItem{ ProductName = "hi 2" } } }; // This will remove the xsi/xsd namespaces from serialization XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); XmlSerializer ser = new XmlSerializer(typeof(ShopItem)); ser.Serialize(Console.Out, item, ns);
Output
XML yang terhasil tanpa elemen Varian dan ruang nama:
<SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </SHOPITEM>
Atas ialah kandungan terperinci Bagaimana untuk Melumpuhkan Rendering Elemen Root dalam Pensirilan XML untuk Tatasusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!