Klasse „System.Xml.Serialization.XmlSerializer“ - .NET (2024)

  • Artikel

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Die XML-Serialisierung ist die Konvertierung der öffentlichen Eigenschaften und Felder eines Objekts in ein serielles Format (in diesem Fall XML) zum Zweck der Speicherung und Übermittlung. Die Deserialisierung erstellt das Objekt aus der XML-Ausgabe in seinem ursprünglichen Zustand erneut. Sie können sich die Serialisierung als Möglichkeit zum Speichern des Zustands eines Objekts in einem Stream oder Puffer vorstellen. Beispielsweise verwendet ASP.NET die Klasse XmlSerializer zum Codieren von XML-Webdienstnachrichten.

Die Daten des Objekts werden durch Konstrukte der Programmiersprache beschrieben, z.B. Klassen, Felder, Eigenschaften, primitive Typen, Arrays oder auch eingebettetes XML in Form von XmlElement-Objekten oder XmlAttribute-Objekten. Sie können eigene, mit Attributen versehene Klassen erstellen oder die Klassen mit dem Tool für die XML-Schemadefinition (Xsd.exe) auf der Grundlage eines vorhandenen Dokuments für die XML-Schemadefinition (XSD) generieren. Wenn ein XML-Schema gegeben ist, können Sie Xsd.exe ausführen und so eine Reihe von Klassen erstellen, die für dieses Schema streng typisiert und mit Attributen versehen sind, damit bei der Serialisierung das Schema eingehalten wird.

Zum Übertragen von Daten zwischen Objekten und XML ist eine Zuordnung zwischen den Programmiersprachenkonstrukten und dem XML-Schema sowie zwischen dem XML-Schema und den Programmiersprachenkonstrukten erforderlich. XmlSerializer und damit verbundene Tools wie Xsd.exe stellen die Brücke zwischen diesen beiden Technologien sowohl zur Entwurfszeit als auch zur Laufzeit dar. Verwenden Sie zur Entwurfszeit Xsd.exe, um ein XML-Schemadokument (.xsd) aus Ihren benutzerdefinierten Klassen oder Klassen aus einem bestimmten Schema zu erstellen. In beiden Fällen werden die Klassen mit benutzerdefinierten Attributen versehen, um XmlSerializer anzuweisen, wie die Zuordnung zwischen dem XML-Schemasystem und der Common Language Runtime erfolgen soll. Zur Laufzeit können Instanzen der Klassen in XML-Dokumente serialisiert werden, die dem angegebenen Schema entsprechen. Ebenso können diese XML-Dokumente in Laufzeitobjekte deserialisiert werden. Beachten Sie, dass das XML-Schema optional ist und zur Entwurfszeit oder Laufzeit nicht erforderlich ist.

Steuern der generierten XML

Um die generierte XML zu steuern, können Sie spezielle Attribute auf Klassen und Member anwenden. Wenn Sie beispielsweise einen anderen XML-Elementnamen angeben möchten, wenden Sie XmlElementAttribute auf ein öffentliches Feld oder eine Eigenschaft an, und legen Sie die ElementName-Eigenschaft fest. Eine vollständige Liste ähnlicher Attribute finden Sie unter Attribute zur Steuerung der XML-Serialisierung. Sie können auch die IXmlSerializable-Schnittstelle implementieren, um die XML-Ausgabe zu steuern.

Wenn die generierte XML Abschnitt5 des World Wide Consortium-Dokuments (Simple Object Access-Protokoll (SOAP) 1.1) entsprechen muss, müssen Sie XmlSerializer mit XmlTypeMapping erstellen. Um die codierte SOAP-XML weiter zu steuern, verwenden Sie die unter Attribute zur Steuerung der Serialisierung von codiertem SOAP aufgeführten Attribute.

Mit XmlSerializer können Sie stark typisierte Klassen nutzen und dennoch von der Flexibilität von XML profitieren. Wenn Sie Felder oder Eigenschaften des Typs XmlElement, XmlAttribute oder XmlNode in Ihren stark typisierten Klassen verwenden, können Sie Teile des XML-Dokuments direkt in XML-Objekte einlesen.

Wenn Sie mit erweiterbaren XML-Schemas arbeiten, können Sie auch die Attribute XmlAnyElementAttribute und XmlAnyAttributeAttribute zum Serialisieren oder Deserialisieren von Elementen oder Attributen verwenden, die im ursprünglichen Schema nicht enthalten sind. Um die Objekte zu verwenden, wenden Sie XmlAnyElementAttribute auf ein Feld an, das ein Array von XmlElement-Objekten zurückgibt, oder wenden Sie XmlAnyAttributeAttribute auf ein Feld an, das ein Array von XmlAttribute-Objekten zurückgibt.

Wenn eine Eigenschaft oder ein Feld ein komplexes Objekt zurückgibt (z.B. ein Array oder eine Klasseninstanz), wird dieses von XmlSerializer in ein Element konvertiert, das innerhalb des XML-Hauptdokuments geschachtelt ist. Die erste Klasse im folgenden Code gibt beispielsweise eine Instanz der zweiten Klasse zurück.

Public Class MyClass Public MyObjectProperty As MyObjectEnd ClassPublic Class MyObject Public ObjectName As StringEnd Class
public class MyClass{ public MyObject MyObjectProperty;}public class MyObject{ public string ObjectName;}

Die serialisierte XML-Ausgabe sieht wie folgt aus:

<MyClass> <MyObjectProperty> <ObjectName>My String</ObjectName> </MyObjectProperty></MyClass>

Wenn ein Schema ein optionales Element (minOccurs = '0') oder einen Standardwert enthält, haben Sie zwei Optionen. Eine Option besteht darin, System.ComponentModel.DefaultValueAttribute zur Angabe des Standardwerts zu verwenden, wie im folgenden Code dargestellt:

Public Class PurchaseOrder <System.ComponentModel.DefaultValueAttribute ("2002")> _ Public Year As StringEnd Class
public class PurchaseOrder{ [System.ComponentModel.DefaultValueAttribute ("2002")] public string Year;}

Eine weitere Option besteht darin, ein spezielles Muster zum Erstellen eines booleschen Felds zu verwenden, das von XmlSerializer erkannt wird, und XmlIgnoreAttribute auf das Feld anzuwenden. Das Muster wird im Format propertyNameSpecified erstellt. Wenn beispielsweise ein Feld mit dem Namen „MyFirstName“ vorhanden ist, erstellen Sie auch ein Feld mit dem Namen „MyFirstNameSpecified“, das XmlSerializer anweist, ob das XML-Element namens „MyFirstName“ generiert werden soll. Dies wird im folgenden Beispiel gezeigt.

Public Class OptionalOrder ' This field's value should not be serialized ' if it is uninitialized. Public FirstOrder As String ' Use the XmlIgnoreAttribute to ignore the ' special field named "FirstOrderSpecified". <System.Xml.Serialization.XmlIgnoreAttribute> _ Public FirstOrderSpecified As BooleanEnd Class
public class OptionalOrder{ // This field should not be serialized // if it is uninitialized. public string FirstOrder; // Use the XmlIgnoreAttribute to ignore the // special field named "FirstOrderSpecified". [System.Xml.Serialization.XmlIgnoreAttribute] public bool FirstOrderSpecified;}

Außerkraftsetzen der Standardserialisierung

Sie können auch die Serialisierung einer beliebigen Objektgruppe und ihrer Felder und Eigenschaften außer Kraft setzen, indem Sie eins der entsprechenden Attribute erstellen und einer Instanz der XmlAttributes-Klasse hinzufügen. Das Außerkraftsetzen der Serialisierung auf diese Weise hat zwei Vorteile: Erstens können Sie die Serialisierung von Objekten in einer DLL steuern und erweitern, auch wenn Sie keinen Zugriff auf die Quelle haben. Zweitens können Sie einen Satz serialisierbarer Klassen erstellen, die Objekte aber auf mehrere Arten serialisieren. Ausführlichere Informationen finden Sie im Artikel zur XmlAttributeOverrides-Klasse und unter Vorgehensweise: Steuern der Serialisierung abgeleiteter Klassen.

Rufen Sie die Serialize-Methode auf, um ein Objekt zu serialisieren. Rufen Sie die Deserialize-Methode auf, um ein Objekt zu deserialisieren.

Informationen zum Hinzufügen von XML-Namespaces zu einem XML-Dokument finden Sie unter XmlSerializerNamespaces.

Hinweis

XmlSerializer wendet eine besondere Behandlung auf Klassen an, die IEnumerable oder ICollection implementieren. Eine Klasse, die IEnumerable implementiert, muss eine öffentliche Add-Methode mit einem einzigen Parameter implementieren. Der Parameter der Add-Methode muss denselben Typ aufweisen, der von der Current-Eigenschaft für den von GetEnumerator zurückgegebenen Wert oder einer der Basiswerte dieses Typs zurückgegeben wird. Eine Klasse, die ICollection (z.B. CollectionBase) zusätzlich zu IEnumerable implementiert, muss eine öffentliche mit Item indizierte Eigenschaft (Indexer in C#), die einen ganzzahligen Wert annimmt, sowie eine öffentliche Count-Eigenschaft vom Typ „Integer“ aufweisen. Der Parameter für die Add-Methode muss vom gleichen Typ sein wie der Wert, den die Item-Eigenschaft zurückgibt, oder muss ein Basistyp dieses Typs sein. Bei Klassen, die ICollection implementieren, werden die zu serialisierenden Werte über die indizierte Item-Eigenschaft und nicht durch einen Aufruf von GetEnumerator abgerufen.

Sie müssen über die Berechtigung zum Schreiben in das temporäre Verzeichnis (gemäß Definition durch die TEMP-Umgebungsvariable) verfügen, um ein Objekt zu deserialisieren.

Dynamisch generierte Assemblys

Um die Leistung zu erhöhen, generiert die XML-Serialisierungsinfrastruktur dynamisch Assemblys zum Serialisieren und Deserialisieren der angegebenen Typen. Die Infrastruktur sucht diese Assemblys und verwendet sie wieder. Dieses Verhalten tritt nur bei Verwendung der folgenden Konstruktoren auf:

XmlSerializer.XmlSerializer(Type)

XmlSerializer.XmlSerializer(Type, String)

Wenn Sie einen der anderen Konstruktoren verwenden, werden mehrere Versionen derselben Assembly generiert und nie entladen, was zu einem Arbeitsspeicherverlust und einer schlechten Leistung führt. Die einfachste Lösung besteht darin, einen der beiden zuvor erwähnten Konstruktoren zu verwenden. Andernfalls müssen Sie die Assemblys in Hashtable zwischenspeichern, wie im folgenden Beispiel gezeigt:

Hashtable serializers = new Hashtable();// Use the constructor that takes a type and XmlRootAttribute.XmlSerializer s = new XmlSerializer(typeof(MyClass), myRoot);// Implement a method named GenerateKey that creates unique keys// for each instance of the XmlSerializer. The code should take// into account all parameters passed to the XmlSerializer// constructor.object key = GenerateKey(typeof(MyClass), myRoot);// Check the local cache for a matching serializer.XmlSerializer ser = (XmlSerializer)serializers[key];if (ser == null){ ser = new XmlSerializer(typeof(MyClass), myRoot); // Cache the serializer. serializers[key] = ser;}// Use the serializer to serialize or deserialize.
Dim serializers As New Hashtable()' Use the constructor that takes a type and XmlRootAttribute.Dim s As New XmlSerializer(GetType([MyClass]), myRoot)' Implement a method named GenerateKey that creates unique keys' for each instance of the XmlSerializer. The code should take' into account all parameters passed to the XmlSerializer' constructor.Dim key As Object = GenerateKey(GetType([MyClass]), myRoot)' Check the local cache for a matching serializer.Dim ser As XmlSerializer = CType(serializers(key), XmlSerializer)If ser Is Nothing Then ser = New XmlSerializer(GetType([MyClass]), myRoot) ' Cache the serializer. serializers(key) = serEnd If' Use the serializer to serialize or deserialize.

Serialisierung von ArrayList und generischer Listen

XmlSerializer kann die folgenden Elemente nicht serialisieren oder deserialisieren:

  • Arrays von ArrayList
  • Arrays von List<T>

Serialisierung von Enumerationen von „unsigned long“

XmlSerializer kann nicht zum Serialisieren einer Enumeration instanziiert werden, wenn die folgenden Bedingungen zutreffen: Die Enumeration ist vom Typ „unsigned long“ (ulong in C#), und die Enumeration enthält ein Member mit einem Wert, der größer als 9.223.372.036.854.775.807 ist. Beispielsweise kann Folgendes nicht serialisiert werden:

public enum LargeNumbers: ulong{ a = 9223372036854775808}// At run time, the following code will fail.xmlSerializer mySerializer=new XmlSerializer(typeof(LargeNumbers));

Veraltete Typen

Die XmlSerializer Klasse serialisiert keine Objekte, die als [Obsolete]gekennzeichnet sind.

Klasse „System.Xml.Serialization.XmlSerializer“ - .NET (2024)

FAQs

What is the use of XmlSerializer in C#? ›

The XmlSerializer enables you to control how objects are encoded into XML.

What are the limitations of XML serialization with the XmlSerializer? ›

The XmlSerializer has a few drawbacks.
  • It must know all the types being serialized. ...
  • It cannot do circular references.
  • It will serializes the same object multiple times if referenced multiple times in the object graph.
  • Cannot handle private field serialization.
Sep 20, 2008

Is XmlSerializer safe? ›

XmlSerializer. Deserialize(TextReader) internally calls the other override - XmlSerializer. Deserialize(XmlTextReader) with XmlResolver set to null, so it should be safe from XXE attacks, however if do you want to disable dtd processing altogether, below should be used instead.

How to serialize XML response in C#? ›

Once you have a C# object with data, call the Serialize() method on the XmlSerialize class, passing in a stream object and the object to serialize. The C# object is then serialized to XML and placed into the stream. If the stream object is a memory stream, you now have an XML string in memory.

What does it mean to serialize XML? ›

Serialization is the process of converting an object into a form that can be readily transported. For example, you can serialize an object and transport it over the Internet using HTTP between a client and a server. On the other end, deserialization reconstructs the object from the stream.

How to serialize an object into XML? ›

To serialize an object
  1. Create the object and set its public fields and properties.
  2. Construct a XmlSerializer using the type of the object. ...
  3. Call the Serialize method to generate either an XML stream or a file representation of the object's public properties and fields.
Sep 15, 2021

What are the advantages of serialization in C#? ›

Advantages of C# serialization

Serialization lets you to store the persistent or non-persistent state of an object in a storage medium, allowing for the exact re-creation of that data later. This allows data to be transmitted across a network in a cross-platform compatible format.

What are the disadvantages of serialization? ›

Performance: Serialization can be slower than other methods of storing data, especially for large amounts of data. Compatibility: Different programming languages and platforms may have different serialization formats, which can make it difficult to share data between different systems.

What is the maximum length of XmlSerializer? ›

XmlSerializer has no limit on the length of a string it can serialize.

What is the namespace in XmlSerializer? ›

Xml. Serialization namespace contains several Attribute classes that can be applied to members of a class. For example, if a class contains a member that will be serialized as an XML element, you can apply the XmlElementAttribute attribute to the member.

What are the risks of XML security? ›

One of the primary risks associated with XML injection is the potential exposure of sensitive information. Attacks can manipulate XML input to access and retrieve confidential data stored on the server. This may include personally identifiable information (PII), financial records, or proprietary business data.

Why should developers be concerned about XML parser defense? ›

However, when XML parsers process external entities without proper validation, it opens the door for various security threats. Attackers can exploit this vulnerability to access local files, perform remote code execution, and launch denial-of-service attacks, among other malicious activities.

What is XmlSerializer in C#? ›

The XmlSerializer enables you to control how objects are encoded into XML, it has a number of constructors. If you use any of the constructors other than the one that takes a type then a new temporary assembly is created EVERY TIME you create a serializer, rather than only once.

What format is .NET serialization? ›

NET features the following serialization technologies: JSON serialization maps . NET objects to and from JavaScript Object Notation (JSON). JSON is an open standard that's commonly used to share data across the web.

How to serialize using JSON? ›

Use manual serialization for smaller projects

It involves passing the raw JSON string to the jsonDecode() function, and then looking up the values you need in the resulting Map<String, dynamic> . It has no external dependencies or particular setup process, and it's good for a quick proof of concept.

How to use XML documentation in C#? ›

Documentation comments are similar to C# single-line comments, but start with /// (that's three slashes), and can be applied to any user-defined type or member. As well as containing descriptive text, these comments can also include embedded XML tags.

What is the use of serializer and deserializer? ›

A Serializer/Deserializer (SerDes) is a pair of functional blocks commonly used in high speed communications to compensate for limited input/output. These blocks convert data between serial data and parallel interfaces in each direction.

What is serializer in C#? ›

Serialization is the process of converting an object or data structure into a format that can be easily stored or transmitted. In C#, JSON serialization is commonly used due to its simplicity and widespread support.

What is the role of XML in C#? ›

The XmlNode class plays an important role. However, this class represents a single node of XML that could be the root node of an XML document and could represent the entire file. This class is an abstract base class for many useful classes for inserting, removing, and replacing nodes, navigating through the document.

References

Top Articles
Iowa Football 2024 Season Preview: HawkeyeInsider's Game-By-Game Predictions
Minnesota Gopher Football 2024 season prediction and preview
Jordanbush Only Fans
Truist Bank Near Here
Ffxiv Palm Chippings
Frank Lloyd Wright, born 150 years ago, still fascinates
Paris 2024: Kellie Harrington has 'no more mountains' as double Olympic champion retires
Beds From Rent-A-Center
CA Kapil 🇦🇪 Talreja Dubai on LinkedIn: #businessethics #audit #pwc #evergrande #talrejaandtalreja #businesssetup…
Cinepacks.store
Fcs Teamehub
Cars For Sale Tampa Fl Craigslist
A Fashion Lover's Guide To Copenhagen
Alaska Bücher in der richtigen Reihenfolge
Slmd Skincare Appointment
R/Altfeet
Hillside Funeral Home Washington Nc Obituaries
4302024447
Nebraska Furniture Tables
Spartanburg County Detention Facility - Annex I
Learn2Serve Tabc Answers
Truth Of God Schedule 2023
2016 Hyundai Sonata Refrigerant Capacity
The Grand Canyon main water line has broken dozens of times. Why is it getting a major fix only now?
Wausau Marketplace
Drago Funeral Home & Cremation Services Obituaries
Orange Pill 44 291
Craigslist St. Cloud Minnesota
12 Facts About John J. McCloy: The 20th Century’s Most Powerful American?
E32 Ultipro Desktop Version
Hesburgh Library Catalog
2011 Hyundai Sonata 2 4 Serpentine Belt Diagram
R/Mp5
Shauna's Art Studio Laurel Mississippi
How to Draw a Bubble Letter M in 5 Easy Steps
Lake Dunson Robertson Funeral Home Lagrange Georgia Obituary
Roto-Rooter Plumbing and Drain Service hiring General Manager in Cincinnati Metropolitan Area | LinkedIn
Etowah County Sheriff Dept
Ishow Speed Dick Leak
Pay Entergy Bill
Wo ein Pfand ist, ist auch Einweg
2 Pm Cdt
Weather Underground Corvallis
Petra Gorski Obituary (2024)
Hanco*ck County Ms Busted Newspaper
Conan Exiles Tiger Cub Best Food
A jovem que batizou lei após ser sequestrada por 'amigo virtual'
Dobratz Hantge Funeral Chapel Obituaries
Craigslist Free Cats Near Me
Westport gun shops close after confusion over governor's 'essential' business list
28 Mm Zwart Spaanplaat Gemelamineerd (U999 ST9 Matte | RAL9005) Op Maat | Zagen Op Mm + ABS Kantenband
Duffield Regional Jail Mugshots 2023
Latest Posts
Article information

Author: Geoffrey Lueilwitz

Last Updated:

Views: 5905

Rating: 5 / 5 (60 voted)

Reviews: 83% of readers found this page helpful

Author information

Name: Geoffrey Lueilwitz

Birthday: 1997-03-23

Address: 74183 Thomas Course, Port Micheal, OK 55446-1529

Phone: +13408645881558

Job: Global Representative

Hobby: Sailing, Vehicle restoration, Rowing, Ghost hunting, Scrapbooking, Rugby, Board sports

Introduction: My name is Geoffrey Lueilwitz, I am a zealous, encouraging, sparkling, enchanting, graceful, faithful, nice person who loves writing and wants to share my knowledge and understanding with you.