SoapTypeAttribute Class
Controls the schema generated by the XmlSerializer when a class instance is serialized as SOAP encoded XML.
For a list of all members of this type, see SoapTypeAttribute Members.
System.Object
System.Attribute
System.Xml.Serialization.SoapTypeAttribute
[Visual Basic] <AttributeUsage(AttributeTargets.Class Or AttributeTargets.Struct _ Or AttributeTargets.Enum Or AttributeTargets.Interface)> Public Class SoapTypeAttribute Inherits Attribute [C#] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Interface)] public class SoapTypeAttribute : Attribute [C++] [AttributeUsage(AttributeTargets::Class | AttributeTargets::Struct | AttributeTargets::Enum | AttributeTargets::Interface)] public __gc class SoapTypeAttribute : public Attribute [JScript] public AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Interface) class SoapTypeAttribute extends Attribute
Thread Safety
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Remarks
The SoapIgnoreAttribute class belongs to a family of attributes that controls how the XmlSerializer serializes, or deserializes, an object as encoded SOAP XML . The resulting XML conforms to section 5 of the World Wide Web Consortium (www.w3.org) document, "Simple Object Access Protocol (SOAP) 1.1". For a complete list of similar attributes, see Attributes That Control Encoded SOAP Serialization.
To serialize an object as an encoded SOAP message, you must construct the XmlSerializer using an XmlTypeMapping created with the ImportTypeMapping method of the SoapReflectionImporter class.
The SoapTypeAttribute can only be applied to class declarations.
The IncludeInSchema property determines whether the resulting XML element type is included in the XML Schema document (.xsd) for the generated XML stream. To see the schema, compile the class into a DLL file. Pass the resulting file as an argument to the XML Schema Definition Tool (Xsd.exe). The tool generates the XML Schema for the XML stream generated when the class is serialized by an instance of the XmlSerializer class.
Setting a different namespace will cause Xsd.exe to write a different schema (.xsd) file for the XML generated when the class is serialized.
Example
[Visual Basic, C#, C++] The following example serializes a class named Group. The SoapTypeAttribute is applied to the class, with the TypeName set to "SoapGroupType". The SoapTypeAttribute is also overridden, changing the TypeName to "Team". Both versions are serialized, resulting in two files: SoapType.xml and SoapType2.xml.
[Visual Basic] Imports System Imports System.IO Imports System.Xml Imports System.Xml.Serialization ' The SoapType is overridden when the ' SerializeOverride method is called. <SoapType("SoapGroupType", "http://www.cohowinery.com")> _ Public class Group Public GroupName As String Public Employees() As Employee End Class <SoapType("EmployeeType")> _ Public Class Employee Public Name As String End Class Public class Run Public Shared Sub Main() Dim test As Run = New Run() test.SerializeOriginal("SoapType.xml") test.SerializeOverride("SoapType2.xml") test.DeserializeObject("SoapType2.xml") End Sub Public Sub SerializeOriginal(filename As String ) ' Create an instance of the XmlSerializer class that ' can be used for serializing as a SOAP message. Dim mapp As XmlTypeMapping = _ (New SoapReflectionImporter()).ImportTypeMapping(GetType(Group)) Dim mySerializer As XmlSerializer = _ New XmlSerializer(mapp) ' Writing the file requires a TextWriter. Dim writer As TextWriter = New StreamWriter(filename) ' Create an instance of the class that will be serialized. Dim myGroup As Group = New Group() ' Set the object properties. myGroup.GroupName = ".NET" Dim e1 As Employee = New Employee() e1.Name = "Pat" myGroup.Employees=New Employee(){e1} ' Serialize the class, and close the TextWriter. mySerializer.Serialize(writer, myGroup) writer.Close() End Sub Public Sub SerializeOverride(filename As string ) ' Create an instance of the XmlSerializer class that ' uses a SoapAttributeOverrides object. Dim mySerializer As XmlSerializer = CreateOverrideSerializer() ' Writing the file requires a TextWriter. Dim writer As TextWriter = New StreamWriter(filename) ' Create an instance of the class that will be serialized. Dim myGroup As Group = New Group() ' Set the object properties. myGroup.GroupName = ".NET" Dim e1 As Employee = New Employee() e1.Name = "Pat" myGroup.Employees=New Employee(){e1} ' Serialize the class, and close the TextWriter. mySerializer.Serialize(writer, myGroup) writer.Close() End Sub Private Function CreateOverrideSerializer() As XmlSerializer ' Create and return an XmlSerializer instance used to ' override and create SOAP messages. Dim mySoapAttributeOverrides As SoapAttributeOverrides = _ New SoapAttributeOverrides() Dim soapAtts As SoapAttributes = New SoapAttributes() ' Override the SoapTypeAttribute. Dim soapType As SoapTypeAttribute = New SoapTypeAttribute() soapType.TypeName = "Team" soapType.IncludeInSchema = false soapType.Namespace = "http://www.microsoft.com" soapAtts.SoapType = soapType mySoapAttributeOverrides.Add(GetType(Group),soapAtts) ' Create an XmlTypeMapping that is used to create an instance ' of the XmlSerializer. Then return the XmlSerializer object. Dim myMapping As XmlTypeMapping = (New SoapReflectionImporter( _ mySoapAttributeOverrides)).ImportTypeMapping(GetType(Group)) Dim ser As XmlSerializer = New XmlSerializer(myMapping) return ser End Function Public Sub DeserializeObject(filename As String) ' Create an instance of the XmlSerializer class. Dim mySerializer As XmlSerializer = CreateOverrideSerializer() ' Reading the file requires a TextReader. Dim reader As TextReader = New StreamReader(filename) ' Deserialize and cast the object. Dim myGroup As Group = _ CType(mySerializer.Deserialize(reader), Group) Console.WriteLine(myGroup.GroupName) End Sub End Class [C#] using System; using System.IO; using System.Xml; using System.Xml.Serialization; // The SoapType is overridden when the // SerializeOverride method is called. [SoapType("SoapGroupType", "http://www.cohowinery.com")] public class Group { public string GroupName; public Employee[] Employees; } [SoapType("EmployeeType")] public class Employee{ public string Name; } public class Run { public static void Main() { Run test = new Run(); test.SerializeOriginal("SoapType.xml"); test.SerializeOverride("SoapType2.xml"); test.DeserializeObject("SoapType2.xml"); } public void SerializeOriginal(string filename){ // Create an instance of the XmlSerializer class that // can be used for serializing as a SOAP message. XmlTypeMapping mapp = (new SoapReflectionImporter()).ImportTypeMapping(typeof(Group)); XmlSerializer mySerializer = new XmlSerializer(mapp); // Writing the file requires a TextWriter. TextWriter writer = new StreamWriter(filename); // Create an instance of the class that will be serialized. Group myGroup = new Group(); // Set the object properties. myGroup.GroupName = ".NET"; Employee e1 = new Employee(); e1.Name = "Pat"; myGroup.Employees=new Employee[]{e1}; // Serialize the class, and close the TextWriter. mySerializer.Serialize(writer, myGroup); writer.Close(); } public void SerializeOverride(string filename) { // Create an instance of the XmlSerializer class that // uses a SoapAttributeOverrides object. XmlSerializer mySerializer = CreateOverrideSerializer(); // Writing the file requires a TextWriter. TextWriter writer = new StreamWriter(filename); // Create an instance of the class that will be serialized. Group myGroup = new Group(); // Set the object properties. myGroup.GroupName = ".NET"; Employee e1 = new Employee(); e1.Name = "Pat"; myGroup.Employees=new Employee[]{e1}; // Serialize the class, and close the TextWriter. mySerializer.Serialize(writer, myGroup); writer.Close(); } private XmlSerializer CreateOverrideSerializer() { // Create and return an XmlSerializer instance used to // override and create SOAP messages. SoapAttributeOverrides mySoapAttributeOverrides = new SoapAttributeOverrides(); SoapAttributes soapAtts = new SoapAttributes(); // Override the SoapTypeAttribute. SoapTypeAttribute soapType = new SoapTypeAttribute(); soapType.TypeName = "Team"; soapType.IncludeInSchema = false; soapType.Namespace = "http://www.microsoft.com"; soapAtts.SoapType = soapType; mySoapAttributeOverrides.Add(typeof(Group),soapAtts); // Create an XmlTypeMapping that is used to create an instance // of the XmlSerializer. Then return the XmlSerializer object. XmlTypeMapping myMapping = (new SoapReflectionImporter( mySoapAttributeOverrides)).ImportTypeMapping(typeof(Group)); XmlSerializer ser = new XmlSerializer(myMapping); return ser; } public void DeserializeObject(string filename){ // Create an instance of the XmlSerializer class. XmlSerializer mySerializer = CreateOverrideSerializer(); // Reading the file requires a TextReader. TextReader reader = new StreamReader(filename); // Deserialize and cast the object. Group myGroup; myGroup = (Group) mySerializer.Deserialize(reader); Console.WriteLine(myGroup.GroupName); } } [C++] #using <mscorlib.dll> #using <System.Xml.dll> using namespace System; using namespace System::IO; using namespace System::Xml; using namespace System::Xml::Serialization; [SoapType(S"EmployeeType")] __gc public class Employee { public: String* Name; }; // The SoapType is overridden when the // SerializeOverride method is called. [SoapType(S"SoapGroupType", S"http://www.cohowinery.com")] __gc public class Group { public: String* GroupName; Employee * Employees[]; }; __gc public class Run { public: void SerializeOriginal(String* filename) { // Create an instance of the XmlSerializer class that // can be used for serializing as a SOAP message. XmlTypeMapping * mapp = (new SoapReflectionImporter()) -> ImportTypeMapping(__typeof(Group)); XmlSerializer* mySerializer = new XmlSerializer(mapp); // Writing the file requires a TextWriter. TextWriter* writer = new StreamWriter(filename); // Create an instance of the class that will be serialized. Group* myGroup = new Group(); // Set the Object* properties. myGroup -> GroupName = S".NET"; Employee* e1 = new Employee(); e1 -> Name = S"Pat"; myGroup -> Employees = new Employee*[1]; myGroup -> Employees[0] = e1; // Serialize the class, and close the TextWriter. mySerializer -> Serialize(writer, myGroup); writer -> Close(); } void SerializeOverride(String* filename) { // Create an instance of the XmlSerializer class that // uses a SoapAttributeOverrides Object*. XmlSerializer * mySerializer = CreateOverrideSerializer(); // Writing the file requires a TextWriter. TextWriter* writer = new StreamWriter(filename); // Create an instance of the class that will be serialized. Group* myGroup = new Group(); // Set the Object* properties. myGroup -> GroupName = S".NET"; Employee* e1 = new Employee(); e1 -> Name = S"Pat"; myGroup -> Employees = new Employee*[5]; myGroup -> Employees[0] = e1; // Serialize the class, and close the TextWriter. mySerializer -> Serialize(writer, myGroup); writer -> Close(); } void DeserializeObject(String* filename) { // Create an instance of the XmlSerializer class. XmlSerializer * mySerializer = CreateOverrideSerializer(); // Reading the file requires a TextReader. TextReader* reader = new StreamReader(filename); // Deserialize and cast the Object*. Group * myGroup; myGroup = dynamic_cast<Group*>(mySerializer -> Deserialize(reader)); Console::WriteLine(myGroup -> GroupName); } private: XmlSerializer * CreateOverrideSerializer() { // Create and return an XmlSerializer instance used to // and create SOAP messages. SoapAttributeOverrides* mySoapAttributeOverrides = new SoapAttributeOverrides(); SoapAttributes* soapAtts = new SoapAttributes(); // Override the SoapTypeAttribute. SoapTypeAttribute* soapType = new SoapTypeAttribute(); soapType -> TypeName = S"Team"; soapType -> IncludeInSchema = false; soapType -> Namespace = S"http://www.microsoft.com"; soapAtts -> SoapType = soapType; mySoapAttributeOverrides -> Add(__typeof(Group), soapAtts); // Create an XmlTypeMapping that is used to create an instance // of the XmlSerializer. Then return the XmlSerializer Object*. XmlTypeMapping * myMapping = (new SoapReflectionImporter(mySoapAttributeOverrides)) -> ImportTypeMapping(__typeof(Group)); XmlSerializer* ser = new XmlSerializer(myMapping); return ser; } }; int main() { Run* test = new Run(); test -> SerializeOriginal(S"SoapType.xml"); test -> SerializeOverride(S"SoapType2.xml"); test -> DeserializeObject(S"SoapType2.xml"); }
[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button
in the upper-left corner of the page.
Requirements
Namespace: System.Xml.Serialization
Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, .NET Compact Framework
Assembly: System.Xml (in System.Xml.dll)
See Also
SoapTypeAttribute Members | System.Xml.Serialization Namespace