Bolehkah elemen akar koleksi ditindas semasa penyirian XML dalam .NET ?
Pertimbangkan kelas dengan atribut bersiri seperti berikut:
[XmlRoot(ElementName="SHOPITEM", Namespace="")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlArrayItem("VARIANT")] public List<ShopItem> Variants { get; set; } }
Ini menghasilkan XML seperti ini:
<SHOPITEM xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <PRODUCTNAME>test</PRODUCTNAME> <Variants> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </Variants> </SHOPITEM>
Walau bagaimanapun, matlamatnya adalah untuk mengalih keluar
Untuk melumpuhkan pemaparan elemen akar untuk koleksi, gantikan atribut [XmlArrayItem] dengan [XmlElement] dalam kod anda. Untuk mengalih keluar ruang nama xsi dan xsd, buat contoh XmlSerializerNamespaces dengan ruang nama kosong dan hantarkannya semasa penyirian.
Berikut ialah contoh yang dikemas kini:
[XmlRoot("SHOPITEM")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlElement("VARIANT")] public List<ShopItem> Variants { get; set; } } // ... // Create a serializer namespaces object XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); // Create a serializer and pass in the namespaces object XmlSerializer ser = new XmlSerializer(typeof(ShopItem)); ser.Serialize(Console.Out, item, ns);
Ini akan menghasilkan output berikut:
<?xml version="1.0" encoding="ibm850"?> <SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </SHOPITEM>
Atas ialah kandungan terperinci Bagaimana untuk Mengalih keluar Elemen Root daripada Koleksi XML semasa Pensiri .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!