


Beispielcode-Analyse der XML-Serialisierung und Deserialisierung von XmlSerializer-Objekten
Der diesem Aufsatz entsprechende .Net-Namespace ist System.Xml.Serialization; der Beispielcode im Artikel muss auf diesen Namespace verweisen.
Warum müssen wir serialisieren und deserialisieren?
Wenn das .Net-Programm ausgeführt wird, befinden sich die Objekte im Speicher, wenn sie zur Verwendung an andere Systeme übergeben werden müssen oder beim Herunterfahren gespeichert werden müssen Sie können wieder verwendet werden, wenn das Programm erneut gestartet wird. Erfordert Serialisierung und Deserialisierung.
Geltungsbereich: In diesem Artikel wird nur die XML-Serialisierung vorgestellt. Tatsächlich kann die Serialisierung eine binäre Serialisierung oder eine Serialisierung in anderen Formaten sein.
Schauen Sie sich den einfachsten XML-Serialisierungscode an
class Program { static void Main(string[] args) { int i = 10; //声明Xml序列化对象实例serializer XmlSerializer serializer = new XmlSerializer(typeof(int)); //执行序列化并将序列化结果输出到控制台 serializer.Serialize(Console.Out, i); Console.Read(); } }
Der obige Code ist für int korrekt i Die Serialisierung wird durchgeführt und das Serialisierungsergebnis wird an die Konsole ausgegeben. Das Ausgabeergebnis lautet wie folgt:
<?xml version="1.0" encoding="gb2312"?> <int>10</int>
Die obige serialisierte XML kann deserialisiert werden. Der folgende Code
static void Main(string[] args) { using (StringReader rdr = new StringReader(@"<?xml version=""1.0"" encoding=""gb2312""?> <int>10</int>")) { //声明序列化对象实例serializer XmlSerializer serializer = new XmlSerializer(typeof(int)); //反序列化,并将反序列化结果值赋给变量i int i = (int)serializer.Deserialize(rdr); //输出反序列化结果 Console.WriteLine("i = " + i); Console.Read(); } }
Der obige Code veranschaulicht den XML-Serialisierungs- und Deserialisierungsprozess auf einfachste Weise. Die .Net-Systemklassenbibliothek ist Wir haben viel gemacht Der Arbeitsaufwand und die Serialisierung und Deserialisierung sind sehr einfach. In der Realität sind die Geschäftsanforderungen jedoch oft komplexer und es ist unmöglich, eine int-Variable einfach zu serialisieren. Während der Anzeige müssen wir komplexe Typen kontrollierbar serialisieren.
Xml-Serialisierung von benutzerdefinierten Objekten:
Es gibt eine Reihe von Feature-Klassen im System.Xml.Serialization-Namespace, um die Serialisierung komplexer Typen zu steuern. Zum Beispiel XmlElementAttribute, XmlAttributeAttribute, XmlArrayAttribute, XmlArrayItemAttribute, XmlRootAttribute usw.
Sehen Sie sich ein kleines Beispiel an. Es gibt eine benutzerdefinierte Klasse „Katze“. Die Klasse „Katze“ hat drei Attribute: Farbe, Sprichwort und Geschwindigkeit.
namespace UseXmlSerialization { class Program { static void Main(string[] args) { //声明一个猫咪对象 var c = new Cat { Color = "White", Speed = 10, Saying = "White or black, so long as the cat can catch mice, it is a good cat" }; //序列化这个对象 XmlSerializer serializer = new XmlSerializer(typeof(Cat)); //将对象序列化输出到控制台 serializer.Serialize(Console.Out, c); Console.Read(); } } [XmlRoot("cat")] public class Cat { //定义Color属性的序列化为cat节点的属性 [XmlAttribute("color")] public string Color { get; set; } //要求不序列化Speed属性 [XmlIgnore] public int Speed { get; set; } //设置Saying属性序列化为Xml子元素 [XmlElement("saying")] public string Saying { get; set; } } }
Sie können XmlElement verwenden, um Attribute anzugeben, die in untergeordnete Knoten serialisiert werden sollen (standardmäßig werden sie in untergeordnete Knoten serialisiert). XmlAttribute-Attribut zur Angabe der Attributserialisierung. Es handelt sich um ein Attribut des XML-Knotens. Es kann auch durch das XmlIgnore-Attribut geändert werden, um zu verlangen, dass der Serialisierer das geänderte Attribut nicht serialisiert.
Xml-Serialisierung des Objekt-Arrays:
Xml-Serialisierung des Arrays erfordert die Verwendung von XmlArrayAttribute und XmlArrayItemAttribute gibt das Array-Element an XML-Knotenname, XmlArrayItemAttribute gibt den XML-Knotennamen des Array-Elements an.
Das folgende Codebeispiel:
/*玉开技术博客 http://www.php.cn/ */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; namespace UseXmlSerialization { class Program { static void Main(string[] args) { //声明一个猫咪对象 var cWhite = new Cat { Color = "White", Speed = 10, Saying = "White or black, so long as the cat can catch mice, it is a good cat" }; var cBlack = new Cat { Color = "Black", Speed = 10, Saying = "White or black, so long as the cat can catch mice, it is a good cat" }; CatCollection cc = new CatCollection { Cats = new Cat[] { cWhite,cBlack} }; //序列化这个对象 XmlSerializer serializer = new XmlSerializer(typeof(CatCollection)); //将对象序列化输出到控制台 serializer.Serialize(Console.Out, cc); Console.Read(); } } [XmlRoot("cats")] public class CatCollection { [XmlArray("items"),XmlArrayItem("item")] public Cat[] Cats { get; set; } } [XmlRoot("cat")] public class Cat { //定义Color属性的序列化为cat节点的属性 [XmlAttribute("color")] public string Color { get; set; } //要求不序列化Speed属性 [XmlIgnore] public int Speed { get; set; } //设置Saying属性序列化为Xml子元素 [XmlElement("saying")] public string Saying { get; set; } } }
Der obige Code gibt Folgendes aus:
<?xml version="1.0" encoding="gb2312"?> <cats xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://ww w.w3.org/2001/XMLSchema"> <items> <item color="White"> <saying>White or black, so long as the cat can catch mice, it is a good cat</saying> </item> <item color="Black"> <saying>White or black, so long as the cat can catch mice, it is a good cat</saying> </item> </items> </cats>
XmlSerializer-Speicherleckproblem:
Danke Chenlulouis, ich habe mir MSDN genau angesehen, es gibt tatsächlich ein Leck, die MSDN-Beschreibung lautet wie folgt:
Dynamisch generierte Assemblys
Um die Leistung zu verbessern, generiert die XML-Serialisierungsinfrastruktur dynamisch Assemblys, um bestimmte Typen zu serialisieren und zu deserialisieren. Diese Infrastruktur wird diese Baugruppen finden und wiederverwenden. Dieses Verhalten tritt nur auf, wenn der folgende Konstruktor verwendet wird:
XmlSerializer(Type)
XmlSerializer.XmlSerializer(Type, String)
Wenn ein anderer Konstruktor verwendet wird, wird dasselbe Programm mehrfach generiert Versionen des Satzes erstellt und nie entladen, was zu Speicherverlusten und langsamer Leistung führt. Die einfachste Lösung besteht darin, einen der beiden zuvor genannten Konstruktoren zu verwenden. Andernfalls muss die Assembly in einer Hashtable zwischengespeichert werden, wie im folgenden Beispiel gezeigt.
Das heißt, wir verwenden XmlSerializer für die Serialisierung. Bei der Initialisierung des XmlSerializer-Objekts ist es am besten, die folgenden beiden Konstruktoren zu verwenden, da es sonst zu Speicherverlusten kommt.
XmlSerializer(Typ)
XmlSerializer >
Das obige ist der detaillierte Inhalt vonBeispielcode-Analyse der XML-Serialisierung und Deserialisierung von XmlSerializer-Objekten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Lösung für PHP-Deserialisierungsfehler Überprüfen Sie die serialisierten Daten. Überprüfen Sie Klassendefinitionen, überprüfen Sie Fehlerprotokolle, aktualisieren Sie PHP-Versionen und wenden Sie Sicherheitsmaßnahmen an usw. Detaillierte Einführung: 1. Überprüfen Sie zunächst, ob die serialisierten Daten gültig sind und der Serialisierungsspezifikation von PHP entsprechen. Wenn die Daten beschädigt sind oder ein falsches Format haben, können Sie versuchen, sie zu reparieren oder die korrekten Daten aus der Sicherung wiederherzustellen. 2. Überprüfen Sie die Klassendefinition und stellen Sie sicher, dass alle in serialisierten Daten verwendeten Klassen vorhanden sind und automatisch geladen werden können. Wenn die Klasse nicht vorhanden ist oder nicht darauf zugegriffen werden kann, können Sie versuchen, die Klassendefinition usw. zu reparieren.

Leitfaden zur Serialisierung und Deserialisierung der C++-Bibliothek Serialisierung: Erstellen eines Ausgabestreams und Konvertieren desselben in ein Archivformat. Objekte ins Archiv serialisieren. Deserialisierung: Erstellt einen Eingabestream und stellt ihn aus dem Archivformat wieder her. Deserialisieren Sie Objekte aus dem Archiv. Praxisbeispiel: Serialisierung: Erstellen eines Ausgabestreams. Erstellen Sie ein Archivobjekt. Erstellen Sie Objekte und serialisieren Sie sie im Archiv. Deserialisierung: Erstellen Sie einen Eingabestream. Erstellen Sie ein Archivobjekt. Erstellen Sie Objekte und deserialisieren Sie sie aus dem Archiv.

PHP-Datenverarbeitungsfähigkeiten: Verwendung der Serialisierungs- und Deserialisierungsfunktionen zur Implementierung der Datenserialisierung und -deserialisierung. Serialisierung und Deserialisierung sind eine der am häufigsten verwendeten Datenverarbeitungsfähigkeiten in der Informatik. In PHP können wir die Funktionen serialize() und unserialize() verwenden, um Datenserialisierungs- und Deserialisierungsvorgänge zu implementieren. In diesem Artikel erhalten Sie eine detaillierte Einführung in die Verwendung dieser beiden Funktionen und stellen relevante Codebeispiele bereit. 1. Was ist Serialisierung und Deserialisierung in der Computerprogrammierung?

Schnittstellen können nicht direkt serialisiert werden, aber nur, wenn sie keine nicht-statischen, nicht-transienten Felder enthalten oder die Methoden writeObject() und readObject() überschreiben. Bestimmte Instanzen können durch konkrete Klassen implementiert werden, die die Schnittstelle implementieren oder überschreiben Sie die Methoden writeObject() und readObject.

Bei der Serialisierung werden Datenstrukturen oder Objekte in ein übertragbares Datenformat konvertiert, während bei der Deserialisierung diese Daten in den ursprünglichen Objekten oder Datenstrukturen wiederhergestellt werden. In der Webentwicklung werden Serialisierungs- und Deserialisierungstechnologien häufig in Szenarien wie Datenübertragung, Caching und verteiltem Rechnen eingesetzt. Wie werden die integrierten Serialisierungs- und Deserialisierungsfunktionen von PHP als häufig verwendete Web-Back-End-Entwicklungssprache implementiert? In diesem Artikel wird die Serialisierung in PHP vorgestellt

Mit der Anwendung verteilter Servertechnologie ist die Funktion der Objektserialisierung und -deserialisierung in der Arbeit von Programmierern immer alltäglicher geworden. Die Go-Sprache bietet außerdem verschiedene Möglichkeiten zur Implementierung der Objektserialisierung und -deserialisierung, und auch die Verwendungsszenarien dieser Methoden sind unterschiedlich. In diesem Artikel wird die Implementierung der Objektserialisierung und -deserialisierung in der Go-Sprache und deren Verwendung ausführlich vorgestellt. 1. Was ist Objektserialisierung und -deserialisierung? Unter Objektserialisierung und -deserialisierung versteht man die Konvertierung einer Objektdatenstruktur in eine speicherbare oder übertragbare Form, um nachfolgende Vorgänge zu erleichtern.

Bei der Serialisierung wird eine Datenstruktur oder ein Objekt zur Speicherung, Übertragung oder Darstellung in eine Zeichenfolge konvertiert und umgekehrt eine Zeichenfolge in die ursprüngliche Datenstruktur oder das ursprüngliche Objekt analysiert. In PHP können wir die Funktion serialize() verwenden, um eine Variable in einen String zu serialisieren, und die Funktion unserialize() verwenden, um einen String in eine primitive Datenstruktur oder ein Objekt zu deserialisieren. Dieser Artikel konzentriert sich auf die Verwendung und Vorsichtsmaßnahmen der Funktion PHPunserialize(). 1. Deserialisieren

Flexjson ist eine schlanke Bibliothek zum Serialisieren und Deserialisieren von Java-Objekten in und aus dem JSON-Format. Wir können ein Java-Objekt aus einem Reader-Stream mit der Methode deserialize() der JSONDeserializer-Klasse deserialisieren, die eine Instanz der Reader-Klasse als JSON-Eingabe verwendet. Syntax publicTdeserialize(Readerinput) Beispiel importjava.io.*;importflexjson.JSONDeserializer;publicclassJSONDeserializeReaderTest{
