XmlSerializer Constructor (Type^, XmlAttributeOverrides^)
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)
Parameters
- type
-
Type:
System::Type^
The type of the object to serialize.
- overrides
- Type: System.Xml.Serialization::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 #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(); }
Available since 8
.NET Framework
Available since 1.1
Portable Class Library
Supported in: portable .NET platforms
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Windows Phone
Available since 8.1
XmlAttributeOverrides
XmlAttributes
XmlSerializer Overload
XmlSerializer Class
System.Xml.Serialization Namespace
Introducing XML Serialization
How to: Specify an Alternate Element Name for an XML Stream
Controlling XML Serialization Using Attributes
Examples of XML Serialization
XML Schema Definition Tool (Xsd.exe)