Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Melumpuhkan Rendering Elemen Root dalam Pensirilan XML untuk Tatasusunan?

Bagaimana untuk Melumpuhkan Rendering Elemen Root dalam Pensirilan XML untuk Tatasusunan?

Mary-Kate Olsen
Lepaskan: 2025-01-03 16:34:41
asal
795 orang telah melayarinya

How to Disable Root Element Rendering in XML Serialization for Arrays?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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);
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan