Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyesuaikan Pengisytiharan Ruang Nama Apabila Mensiri XML dalam .NET?

Bagaimana untuk Menyesuaikan Pengisytiharan Ruang Nama Apabila Mensiri XML dalam .NET?

DDD
DDDasal
2025-01-01 12:08:12476semak imbas

How to Customize Namespace Declarations When Serializing XML in .NET?

Menyesuaikan Pengisytiharan Ruang Nama untuk XML Bersiri dalam .NET

Cabaran timbul apabila cuba menyerikan objek tanpa menghasilkan pengisytiharan ruang nama XML yang berlebihan seperti xsi dan xsd. Secara lalai, proses bersiri menyuntik ruang nama ini ke dalam dokumen XML yang terhasil.

Pertimbangkan coretan kod berikut yang menunjukkan masalah:

StringBuilder builder = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
using (XmlWriter xmlWriter = XmlWriter.Create(builder, settings))
{
    XmlSerializer s = new XmlSerializer(objectToSerialize.GetType());
    s.Serialize(xmlWriter, objectToSerialize);
}

Dokumen XML yang terhasil akan termasuk pengisytiharan ruang nama:

<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" 
    xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" 
    xmlns="urn:something">
 ...
</message>

Untuk menghapuskan pengisytiharan ruang nama yang tidak diperlukan ini, adalah penting untuk menggunakan ruang nama tersuai objek:

...
XmlSerializer s = new XmlSerializer(objectToSerialize.GetType());
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("","");
s.Serialize(xmlWriter, objectToSerialize, ns);

Dengan menggunakan kelas XmlSerializerNamespaces dan menambah rentetan kosong sebagai kunci dan nilai, adalah mungkin untuk mengatasi pengisytiharan ruang nama lalai dan menghasilkan output yang diingini:

<message>
 ...
</message>

Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan Pengisytiharan Ruang Nama Apabila Mensiri XML dalam .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