Der Standard .NET XmlSerializer
verarbeitet Serialisierungszeichenfolgen nicht direkt als CDATA-Abschnitte in XML. Um dies zu erreichen, kann jedoch eine maßgeschneiderte Lösung implementiert werden. Dazu gehört das Erstellen einer Klasse mit einer öffentlichen String-Eigenschaft und einer entsprechenden XmlCDataSection
-Eigenschaft, die für die Serialisierung verwendet wird.
Um dies zu erreichen, erstellen wir eine mit XmlIgnore
gekennzeichnete Eigenschaft, die den Zeichenfolgenwert enthält, und eine weitere mit XmlElement
dekorierte Eigenschaft, die ein XmlCDataSection
zurückgibt. Das XmlElement
-Attribut gibt den XML-Elementnamen an und das XmlIgnore
-Attribut verhindert die direkte Serialisierung der String-Eigenschaft.
Beispielimplementierung:
<code class="language-csharp">[Serializable] public class MyClass { public MyClass() { } [XmlIgnore] // Prevents direct serialization public string MyStringProperty { get; set; } [XmlElement("MyString")] // Specifies the XML element name public System.Xml.XmlCDataSection MyStringCDATA { get { return new System.Xml.XmlDocument().CreateCDataSection(MyStringProperty); } set { MyStringProperty = value.Value; } } }</code>
Serialisierungsbeispiel:
<code class="language-csharp">MyClass myObject = new MyClass(); myObject.MyStringProperty = "<test>Hello World!</test>"; XmlSerializer serializer = new XmlSerializer(typeof(MyClass)); StringWriter writer = new StringWriter(); serializer.Serialize(writer, myObject); Console.WriteLine(writer.ToString());</code>
Dieser Codeausschnitt zeigt, wie Sie die benutzerdefinierte Klasse verwenden, um eine Zeichenfolge als CDATA-Abschnitt zu serialisieren. Beachten Sie, dass die Ausgabe je nach Inhalt von MyStringProperty
variieren kann. Die XmlCDataSection
-Eigenschaft übernimmt die Konvertierung in das entsprechende CDATA-Format während der Serialisierung.
Das obige ist der detaillierte Inhalt vonWie serialisiere ich Strings als CDATA mit XmlSerializer in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!