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
Mary-Kate Olsenasal
2025-01-03 16:34:41792semak imbas

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>

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!

Kenyataan:
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