Initializes a new instance of the XmlSerializer class that can serialize objects of the specified type into XML documents, and deserialize XML documents into objects of the specified type. Each object to be serialized can itself contain instances of classes, which this overload can override with other classes.
Assembly: System.Xml (in System.Xml.dll)
Public Sub New ( _ type As Type, _ overrides As XmlAttributeOverrides _ )
public XmlSerializer(
Type type,
XmlAttributeOverrides overrides
)
public:
XmlSerializer(
Type^ type,
XmlAttributeOverrides^ overrides
)
new : type:Type * overrides:XmlAttributeOverrides -> XmlSerializer
Parameters
- type
- Type: System.Type
The type of the object to serialize.
- overrides
- Type: System.Xml.Serialization.XmlAttributeOverrides
An XmlAttributeOverrides.
The overrides parameter can be used to control how fields and properties are encoded in XML. These settings override any attributes that already exist on the objects. This can be useful when the source code cannot be modified or multiple encodings are required for the same classes.
The following example serializes an instance of a class that is defined in a DLL and to do so, overrides the public members found in the DLL.
' Beginning of HighSchool.dll Imports System Imports System.IO Imports System.Xml Imports System.Xml.Serialization Imports Microsoft.VisualBasic Imports HighSchool Namespace HighSchool Public Class Student Public Name As String Public ID As Integer End Class 'Student Public Class MyClass1 Public Students() As Student End Class 'MyClass1 End Namespace 'HighSchool Namespace College Public Class Graduate Inherits HighSchool.Student Public Sub New() End Sub 'New ' Add a new field named University. Public University As String End Class 'Graduate Public Class Run Public Shared Sub Main() Dim test As New Run() test.WriteOverriddenAttributes("College.xml") test.ReadOverriddenAttributes("College.xml") End Sub 'Main Private Sub WriteOverriddenAttributes(filename As String) ' Writing the file requires a TextWriter. Dim myStreamWriter As New StreamWriter(filename) ' Create an XMLAttributeOverrides class. Dim attrOverrides As New XmlAttributeOverrides() ' Create the XmlAttributes class. Dim attrs As New XmlAttributes() ' Override the Student class. "Alumni" is the name ' of the overriding element in the XML output. Dim attr As New XmlElementAttribute("Alumni", GetType(Graduate)) ' Add the XmlElementAttribute to the collection of ' elements in the XmlAttributes object. attrs.XmlElements.Add(attr) ' Add the XmlAttributes to the XmlAttributeOverrides. ' "Students" is the name being overridden. attrOverrides.Add(GetType(HighSchool.MyClass1), "Students", attrs) ' Create the XmlSerializer. Dim mySerializer As New XmlSerializer(GetType(HighSchool.MyClass1), attrOverrides) Dim oMyClass As New MyClass1() Dim g1 As New Graduate() g1.Name = "Jackie" g1.ID = 1 g1.University = "Alma Mater" Dim g2 As New Graduate() g2.Name = "Megan" g2.ID = 2 g2.University = "CM" Dim myArray As Student() = {g1, g2} oMyClass.Students = myArray mySerializer.Serialize(myStreamWriter, oMyClass) myStreamWriter.Close() End Sub 'WriteOverriddenAttributes Private Sub ReadOverriddenAttributes(filename As String) ' The majority of the code here is the same as that in the ' WriteOverriddenAttributes method. Because the XML being read ' doesn't conform to the schema defined by the DLL, the ' XMLAttributesOverrides must be used to create an ' XmlSerializer instance to read the XML document. Dim attrOverrides As New XmlAttributeOverrides() Dim attrs As New XmlAttributes() Dim attr As New XmlElementAttribute("Alumni", GetType(Graduate)) attrs.XmlElements.Add(attr) attrOverrides.Add(GetType(HighSchool.MyClass1), "Students", attrs) Dim readSerializer As New XmlSerializer(GetType(HighSchool.MyClass1), attrOverrides) ' To read the file, a FileStream object is required. Dim fs As New FileStream(filename, FileMode.Open) Dim oMyClass As MyClass1 oMyClass = CType(readSerializer.Deserialize(fs), MyClass1) ' Here is the difference between reading and writing an ' XML document: You must declare an object of the derived ' type (Graduate) and cast the Student instance to it. Dim g As Graduate Dim grad As Graduate For Each grad In oMyClass.Students g = CType(grad, Graduate) Console.Write((g.Name & ControlChars.Tab)) Console.Write((g.ID.ToString & ControlChars.Tab)) Console.Write((g.University & ControlChars.Cr)) Next grad End Sub 'ReadOverriddenAttributes End Class 'Run End Namespace 'College
// Beginning of HighSchool.dll namespace HighSchool { public class Student { public string Name; public int ID; } public class MyClass { public Student[] Students; } } namespace College { using System; using System.IO; using System.Xml; using System.Xml.Serialization; using HighSchool; public class Graduate:HighSchool.Student { public Graduate(){} // Add a new field named University. public string University; } public class Run { public static void Main() { Run test = new Run(); test.WriteOverriddenAttributes("College.xml"); test.ReadOverriddenAttributes("College.xml"); } private void WriteOverriddenAttributes(string filename) { // Writing the file requires a TextWriter. TextWriter myStreamWriter = new StreamWriter(filename); // Create an XMLAttributeOverrides class. XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides(); // Create the XmlAttributes class. XmlAttributes attrs = new XmlAttributes(); /* Override the Student class. "Alumni" is the name of the overriding element in the XML output. */ XmlElementAttribute attr = new XmlElementAttribute("Alumni", typeof(Graduate)); /* Add the XmlElementAttribute to the collection of elements in the XmlAttributes object. */ attrs.XmlElements.Add(attr); /* Add the XmlAttributes to the XmlAttributeOverrides. "Students" is the name being overridden. */ attrOverrides.Add(typeof(HighSchool.MyClass), "Students", attrs); // Create the XmlSerializer. XmlSerializer mySerializer = new XmlSerializer (typeof(HighSchool.MyClass), attrOverrides); MyClass myClass = new MyClass(); Graduate g1 = new Graduate(); g1.Name = "Jackie"; g1.ID = 1; g1.University = "Alma Mater"; Graduate g2 = new Graduate(); g2.Name = "Megan"; g2.ID = 2; g2.University = "CM"; Student[] myArray = {g1,g2}; myClass.Students = myArray; mySerializer.Serialize(myStreamWriter, myClass); myStreamWriter.Close(); } private void ReadOverriddenAttributes(string filename) { /* The majority of the code here is the same as that in the WriteOverriddenAttributes method. Because the XML being read doesn't conform to the schema defined by the DLL, the XMLAttributesOverrides must be used to create an XmlSerializer instance to read the XML document.*/ XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides(); XmlAttributes attrs = new XmlAttributes(); XmlElementAttribute attr = new XmlElementAttribute("Alumni", typeof(Graduate)); attrs.XmlElements.Add(attr); attrOverrides.Add(typeof(HighSchool.MyClass), "Students", attrs); XmlSerializer readSerializer = new XmlSerializer (typeof(HighSchool.MyClass), attrOverrides); // To read the file, a FileStream object is required. FileStream fs = new FileStream(filename, FileMode.Open); MyClass myClass; myClass = (MyClass) readSerializer.Deserialize(fs); /* Here is the difference between reading and writing an XML document: You must declare an object of the derived type (Graduate) and cast the Student instance to it.*/ Graduate g; foreach(Graduate grad in myClass.Students) { g = (Graduate) grad; Console.Write(g.Name + "\t"); Console.Write(g.ID + "\t"); Console.Write(g.University + "\n"); } } } }
// Beginning of HighSchool.dll #using <System.Xml.dll> #using <System.dll> using namespace System; using namespace System::IO; using namespace System::Xml; using namespace System::Xml::Serialization; namespace HighSchool { public ref class Student { public: String^ Name; int ID; }; public ref class MyClass { public: array<Student^>^Students; }; } namespace College { using namespace HighSchool; public ref class Graduate: public HighSchool::Student { public: Graduate(){} // Add a new field named University. String^ University; }; public ref class Run { public: static void main() { Run^ test = gcnew Run; test->WriteOverriddenAttributes( "College.xml" ); test->ReadOverriddenAttributes( "College.xml" ); } private: void WriteOverriddenAttributes( String^ filename ) { // Writing the file requires a TextWriter. TextWriter^ myStreamWriter = gcnew StreamWriter( filename ); // Create an XMLAttributeOverrides class. XmlAttributeOverrides^ attrOverrides = gcnew XmlAttributeOverrides; // Create the XmlAttributes class. XmlAttributes^ attrs = gcnew XmlAttributes; /* Override the Student class. "Alumni" is the name of the overriding element in the XML output. */ XmlElementAttribute^ attr = gcnew XmlElementAttribute( "Alumni",Graduate::typeid ); /* Add the XmlElementAttribute to the collection of elements in the XmlAttributes object. */ attrs->XmlElements->Add( attr ); /* Add the XmlAttributes to the XmlAttributeOverrides. "Students" is the name being overridden. */ attrOverrides->Add( HighSchool::MyClass::typeid, "Students", attrs ); // Create the XmlSerializer. XmlSerializer^ mySerializer = gcnew XmlSerializer( HighSchool::MyClass::typeid,attrOverrides ); MyClass ^ myClass = gcnew MyClass; Graduate^ g1 = gcnew Graduate; g1->Name = "Jackie"; g1->ID = 1; g1->University = "Alma Mater"; Graduate^ g2 = gcnew Graduate; g2->Name = "Megan"; g2->ID = 2; g2->University = "CM"; array<Student^>^myArray = {g1,g2}; myClass->Students = myArray; mySerializer->Serialize( myStreamWriter, myClass ); myStreamWriter->Close(); } void ReadOverriddenAttributes( String^ filename ) { /* The majority of the code here is the same as that in the WriteOverriddenAttributes method. Because the XML being read doesn't conform to the schema defined by the DLL, the XMLAttributesOverrides must be used to create an XmlSerializer instance to read the XML document.*/ XmlAttributeOverrides^ attrOverrides = gcnew XmlAttributeOverrides; XmlAttributes^ attrs = gcnew XmlAttributes; XmlElementAttribute^ attr = gcnew XmlElementAttribute( "Alumni",Graduate::typeid ); attrs->XmlElements->Add( attr ); attrOverrides->Add( HighSchool::MyClass::typeid, "Students", attrs ); XmlSerializer^ readSerializer = gcnew XmlSerializer( HighSchool::MyClass::typeid,attrOverrides ); // To read the file, a FileStream object is required. FileStream^ fs = gcnew FileStream( filename,FileMode::Open ); MyClass ^ myClass; myClass = dynamic_cast<MyClass^>(readSerializer->Deserialize( fs )); /* Here is the difference between reading and writing an XML document: You must declare an object of the derived type (Graduate) and cast the Student instance to it.*/ Graduate^ g; System::Collections::IEnumerator^ myEnum = myClass->Students->GetEnumerator(); while ( myEnum->MoveNext() ) { Graduate^ grad = safe_cast<Graduate^>(myEnum->Current); g = dynamic_cast<Graduate^>(grad); Console::Write( "{0}\t", g->Name ); Console::Write( "{0}\t", g->ID ); Console::Write( "{0}\n", g->University ); } } }; } int main() { College::Run::main(); }
.NET Framework
Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0.NET Framework Client Profile
Supported in: 4, 3.5 SP1Portable Class Library
Supported in: Portable Class LibraryWindows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.