Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengalih keluar Elemen Root daripada Koleksi XML semasa Pensiri .NET?

Bagaimana untuk Mengalih keluar Elemen Root daripada Koleksi XML semasa Pensiri .NET?

Susan Sarandon
Susan Sarandonasal
2024-12-31 17:10:11698semak imbas

How to Remove the Root Element from an XML Collection during .NET Serialization?

Pensiri XML - Lumpuhkan Pemberian Elemen Akar dalam Koleksi

Soalan:

Bolehkah elemen akar koleksi ditindas semasa penyirian XML dalam .NET ?

Masalah:

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 elemen sepenuhnya. Selain itu, ruang nama xsi dan xsd harus diabaikan daripada elemen akar. Adakah ini mungkin?

Jawapan:

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!

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