Heim Backend-Entwicklung XML/RSS-Tutorial Beispielcode-Analyse der XML-Serialisierung und Deserialisierung von XmlSerializer-Objekten

Beispielcode-Analyse der XML-Serialisierung und Deserialisierung von XmlSerializer-Objekten

Mar 09, 2017 pm 04:57 PM

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();
    }
}
Nach dem Login kopieren

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>
Nach dem Login kopieren

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();
    }
}
Nach dem Login kopieren

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; }
    }
}
Nach dem Login kopieren

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; }
    }
}
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So beheben Sie einen PHP-Deserialisierungsfehler So beheben Sie einen PHP-Deserialisierungsfehler Oct 11, 2023 am 09:30 AM

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.

Wie führt die C++-Funktionsbibliothek die Serialisierung und Deserialisierung durch? Wie führt die C++-Funktionsbibliothek die Serialisierung und Deserialisierung durch? Apr 18, 2024 am 10:06 AM

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-Datenverarbeitungskenntnisse: Verwendung der Serialisierungs- und Deserialisierungsfunktionen zur Implementierung der Datenserialisierung und -deserialisierung PHP-Datenverarbeitungskenntnisse: Verwendung der Serialisierungs- und Deserialisierungsfunktionen zur Implementierung der Datenserialisierung und -deserialisierung Jul 29, 2023 am 10:49 AM

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?

Serialisierung und Deserialisierung von Schnittstellen und abstrakten Klassen in Java Serialisierung und Deserialisierung von Schnittstellen und abstrakten Klassen in Java May 02, 2024 am 08:33 AM

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.

Hochleistungsfähige Serialisierungs- und Deserialisierungstechnologie in PHP Hochleistungsfähige Serialisierungs- und Deserialisierungstechnologie in PHP Jun 22, 2023 pm 09:34 PM

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

Objektserialisierung und Deserialisierung in der Go-Sprache Objektserialisierung und Deserialisierung in der Go-Sprache Jun 03, 2023 am 08:31 AM

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.

Verwenden Sie die PHP-Funktion unserialize(), um die Deserialisierung zu implementieren Verwenden Sie die PHP-Funktion unserialize(), um die Deserialisierung zu implementieren Jun 27, 2023 am 08:01 AM

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

Wie deserialisiere ich Java-Objekte aus dem Reader-Stream in Java mit FlexJson? Wie deserialisiere ich Java-Objekte aus dem Reader-Stream in Java mit FlexJson? Sep 10, 2023 pm 10:57 PM

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{

See all articles