Penyelesaian bijak untuk kekurangan atribut CDATA dalam .NET XmlSerializer
XmlSerializer dalam rangka kerja .NET menyediakan fungsi yang berkuasa untuk menyerikan objek ke dalam dokumen XML. Walau bagaimanapun, ia tidak mempunyai atribut langsung untuk menentukan siri rentetan kepada CDATA.
Penyelesaian kreatif
Untuk mengatasi had ini, kita boleh menggunakan penyelesaian yang bijak. Dengan melaksanakan sifat tersuai yang merangkumi tingkah laku CDATA yang diingini, kita boleh mencapai kesan yang diingini.
<code class="language-csharp">[Serializable] public class MyClass { public MyClass() { } [XmlIgnore] public string MyString { get; set; } [XmlElement("MyString")] public System.Xml.XmlCDataSection MyStringCDATA { get { return new System.Xml.XmlDocument().CreateCDataSection(MyString); } set { MyString = value.Value; } } }</code>
Dalam atribut tersuai ini:
MyString
: Mewakili rentetan sebenar untuk disiri. MyStringCDATA
: Melaksanakan kaedah getter dan setter untuk menukar rentetan kepada CDATA dan sebaliknya. Penggunaan:
Untuk menggunakan penyelesaian ini hanya:
<code class="language-csharp">MyClass mc = new MyClass(); mc.MyString = "<test>Hello World</test>"; XmlSerializer serializer = new XmlSerializer(typeof(MyClass)); StringWriter writer = new StringWriter(); serializer.Serialize(writer, mc); Console.WriteLine(writer.ToString());</code>
Kod ini akan menjana output XML yang dijangkakan, di mana rentetan terkandung dalam CDATA:
<code class="language-xml"><?xml version="1.0" encoding="utf-16"?><myclass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><mystring><![CDATA[<test>Hello World</test>]]></mystring></myclass></code>
(Nota: Contoh XML output mungkin berbeza sedikit daripada yang asal, bergantung pada versi .NET dan tetapan bersiri. Kuncinya ialah atribut MyStringCDATA
berjaya merangkum rentetan dalam bahagian CDATA.)
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensiri Rentetan sebagai CDATA Menggunakan XmlSerializer .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!