SoapTypeAttribute 类  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将类实例序列化为 SOAP 编码的 XML 时,控制 XmlSerializer 生成的架构。
public ref class SoapTypeAttribute : Attribute[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Enum | System.AttributeTargets.Interface | System.AttributeTargets.Struct)]
public class SoapTypeAttribute : Attribute[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Enum | System.AttributeTargets.Interface | System.AttributeTargets.Struct)>]
type SoapTypeAttribute = class
    inherit AttributePublic Class SoapTypeAttribute
Inherits Attribute- 继承
- 属性
示例
The following example serializes a class named Group. 该属性 SoapTypeAttribute 应用于类,并 TypeName 设置为“SoapGroupType”。 SoapTypeAttribute这也被重写,将更改为TypeName“团队”。 这两个版本都序列化,导致两个文件:SoapType.xml和SoapType2.xml。
#using <System.Xml.dll>
#using <System.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Serialization;
[SoapType("EmployeeType")]
public ref class Employee
{
public:
   String^ Name;
};
// The SoapType is overridden when the
// SerializeOverride  method is called.
[SoapType("SoapGroupType","http://www.cohowinery.com")]
public ref class Group
{
public:
   String^ GroupName;
   array<Employee^>^Employees;
};
public ref 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 = (gcnew SoapReflectionImporter)->ImportTypeMapping( Group::typeid );
      XmlSerializer^ mySerializer = gcnew XmlSerializer( mapp );
      // Writing the file requires a TextWriter.
      TextWriter^ writer = gcnew StreamWriter( filename );
      // Create an XML text writer.
      XmlTextWriter^ xmlWriter = gcnew XmlTextWriter( writer );
      xmlWriter->Formatting = Formatting::Indented;
      xmlWriter->Indentation = 2;
      // Create an instance of the class that will be serialized.
      Group^ myGroup = gcnew Group;
      // Set the Object* properties.
      myGroup->GroupName = ".NET";
      Employee^ e1 = gcnew Employee;
      e1->Name = "Pat";
      myGroup->Employees = gcnew array<Employee^>(1);
      myGroup->Employees[ 0 ] = e1;
      // Write the root element.
      xmlWriter->WriteStartElement( "root" );
      // Serialize the class.
      mySerializer->Serialize( xmlWriter, myGroup );
      // Close the root tag.
      xmlWriter->WriteEndElement();
      // Close the XmlWriter.
      xmlWriter->Close();
      // Close the TextWriter.
      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 = gcnew StreamWriter( filename );
      // Create an XML text writer.
      XmlTextWriter^ xmlWriter = gcnew XmlTextWriter( writer );
      xmlWriter->Formatting = Formatting::Indented;
      xmlWriter->Indentation = 2;
      // Create an instance of the class that will be serialized.
      Group^ myGroup = gcnew Group;
      // Set the Object* properties.
      myGroup->GroupName = ".NET";
      Employee^ e1 = gcnew Employee;
      e1->Name = "Pat";
      myGroup->Employees = gcnew array<Employee^>(1);
      myGroup->Employees[ 0 ] = e1;
      // Write the root element.
      xmlWriter->WriteStartElement( "root" );
      // Serialize the class.
      mySerializer->Serialize( xmlWriter, myGroup );
      // Close the root tag.
      xmlWriter->WriteEndElement();
      // Close the XmlWriter.
      xmlWriter->Close();
      // Close the TextWriter.
      writer->Close();
   }
   void DeserializeObject( String^ filename )
   {
      // Create an instance of the XmlSerializer class.
      XmlSerializer^ mySerializer = CreateOverrideSerializer();
      // Reading the file requires a TextReader.
      TextReader^ reader = gcnew StreamReader( filename );
      // Create an XML text reader.
      XmlTextReader^ xmlReader = gcnew XmlTextReader( reader );
      xmlReader->ReadStartElement();
      // Deserialize and cast the object.
      Group^ myGroup;
      myGroup = dynamic_cast<Group^>(mySerializer->Deserialize( xmlReader ));
      xmlReader->ReadEndElement();
      Console::WriteLine( "The GroupName is {0}", myGroup->GroupName );
      Console::WriteLine( "Look at the SoapType.xml and SoapType2.xml "
      "files for the generated XML." );
      // Close the readers.
      xmlReader->Close();
      reader->Close();
   }
private:
   XmlSerializer^ CreateOverrideSerializer()
   {
      // Create and return an XmlSerializer instance used to
      //  and create SOAP messages.
      SoapAttributeOverrides^ mySoapAttributeOverrides = gcnew SoapAttributeOverrides;
      SoapAttributes^ soapAtts = gcnew SoapAttributes;
      // Override the SoapTypeAttribute.
      SoapTypeAttribute^ soapType = gcnew SoapTypeAttribute;
      soapType->TypeName = "Team";
      soapType->IncludeInSchema = false;
      soapType->Namespace = "http://www.microsoft.com";
      soapAtts->SoapType = soapType;
      mySoapAttributeOverrides->Add( Group::typeid, soapAtts );
      // Create an XmlTypeMapping that is used to create an instance 
      // of the XmlSerializer. Then return the XmlSerializer Object*.
      XmlTypeMapping^ myMapping = (gcnew SoapReflectionImporter( mySoapAttributeOverrides ))->ImportTypeMapping( Group::typeid );
      XmlSerializer^ ser = gcnew XmlSerializer( myMapping );
      return ser;
   }
};
int main()
{
   Run^ test = gcnew Run;
   test->SerializeOriginal( "SoapType.xml" );
   test->SerializeOverride( "SoapType2.xml" );
   test->DeserializeObject( "SoapType2.xml" );
}
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 XML text writer.
      XmlTextWriter xmlWriter = new XmlTextWriter(writer);
      xmlWriter.Formatting = Formatting.Indented;
      xmlWriter.Indentation = 2;
      // 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};
      // Write the root element.
      xmlWriter.WriteStartElement("root");
      // Serialize the class.
      mySerializer.Serialize(xmlWriter, myGroup);
      // Close the root tag.
      xmlWriter.WriteEndElement();
      // Close the XmlWriter.
      xmlWriter.Close();
      // Close the TextWriter.
      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 XML text writer.
      XmlTextWriter xmlWriter = new XmlTextWriter(writer);
      xmlWriter.Formatting = Formatting.Indented;
      xmlWriter.Indentation = 2;
      // 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};
      // Write the root element.
      xmlWriter.WriteStartElement("root");
      // Serialize the class.
      mySerializer.Serialize(xmlWriter, myGroup);
      // Close the root tag.
      xmlWriter.WriteEndElement();
      // Close the XmlWriter.
      xmlWriter.Close();
      // Close the TextWriter.
      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);
      // Create an XML text reader.
      XmlTextReader xmlReader = new XmlTextReader(reader);
      xmlReader.ReadStartElement();
      // Deserialize and cast the object.
      Group myGroup = (Group) mySerializer.Deserialize(xmlReader);
      xmlReader.ReadEndElement();
      Console.WriteLine("The GroupName is " + myGroup.GroupName);
      Console.WriteLine("Look at the SoapType.xml and SoapType2.xml " +
        "files for the generated XML.");
      // Close the readers.
      xmlReader.Close();
      reader.Close();
   }
}
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 XML text writer.
      Dim xmlWriter As XmlTextWriter = New XmlTextWriter(writer)
      xmlWriter.Formatting = Formatting.Indented
      xmlWriter.Indentation = 2
      ' 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}
      ' Write the root element.
      xmlWriter.WriteStartElement("root")
      ' Serialize the class.
      mySerializer.Serialize(xmlWriter, myGroup)
      ' Close the root tag.
      xmlWriter.WriteEndElement()
      ' Close the XmlWriter.
      xmlWriter.Close()
      ' Close the TextWriter.
      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 XML text writer.
      Dim xmlWriter As XmlTextWriter = New XmlTextWriter(writer)
      xmlWriter.Formatting = Formatting.Indented
      xmlWriter.Indentation = 2
      ' 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}
      ' Write the root element.
      xmlWriter.WriteStartElement("root")
      ' Serialize the class.
      mySerializer.Serialize(xmlWriter, myGroup)
      ' Close the root tag.
      xmlWriter.WriteEndElement()
      ' Close the XmlWriter.
      xmlWriter.Close()
      ' Close the TextWriter.
      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)
      ' Create an XML text reader.
      Dim xmlReader As XmlTextReader = New XmlTextReader(reader)
      xmlReader.ReadStartElement()
      ' Deserialize and cast the object.
      Dim myGroup As Group = CType(mySerializer.Deserialize(xmlReader), Group)
      xmlReader.ReadEndElement()
      Console.WriteLine("The GroupName is " + myGroup.GroupName)
      Console.WriteLine("Look at the SoapType.xml and SoapType2.xml " + _
        "files for the generated XML.")
      ' Close the readers.
      xmlReader.Close()
      reader.Close()
   End Sub
End Class
注解
该 SoapTypeAttribute 类属于一系列属性,用于控制序列化或反序列化对象的编码 SOAP XML 的方式 XmlSerializer 。 生成的 XML 符合万维网联盟文档的第 5 部分: 简单对象访问协议 (SOAP) 1.1。 有关类似属性的完整列表,请参阅 控制编码的 SOAP 序列化的属性。
若要将对象序列化为编码的 SOAP 消息,XmlSerializer请使用XmlTypeMapping使用类方法SoapReflectionImporter创建的ImportTypeMapping对象。
SoapTypeAttribute只能应用于类声明。
该 IncludeInSchema 属性确定生成的 XML 元素类型是否包含在生成的 XML 流的 XML 架构文档中 (.xsd) 。 若要查看架构,请将类编译为 DLL 文件。 将生成的文件作为参数传递给 XML 架构定义工具 (Xsd.exe) 。 该工具为类的实例 XmlSerializer 序列化类时生成的 XML 流的 XML 架构。
设置不同的命名空间会导致Xsd.exe为序列化类时生成的 XML 流编写不同的架构 (.xsd) 文件。
构造函数
| SoapTypeAttribute() | 初始化 SoapTypeAttribute 类的新实例。 | 
| SoapTypeAttribute(String) | 初始化 SoapTypeAttribute 类的新实例,并指定 XML 类型的名称。 | 
| SoapTypeAttribute(String, String) | 初始化 SoapTypeAttribute 类的新实例,并指定类型的名称和 XML 命名空间。 | 
属性
| IncludeInSchema | 获取或设置一个值,该值指示是否在 SOAP 编码的 XML 架构文档中包括该类型。 | 
| Namespace | 获取或设置 XML 类型的命名空间。 | 
| TypeId | 在派生类中实现时,获取此 Attribute 的唯一标识符。(继承自 Attribute) | 
| TypeName | 获取或设置 XML 类型的名称。 | 
方法
| Equals(Object) | 返回一个值,该值指示此实例是否与指定的对象相等。(继承自 Attribute) | 
| GetHashCode() | 返回此实例的哈希代码。(继承自 Attribute) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| IsDefaultAttribute() | 在派生类中重写时,指示此实例的值是否是派生类的默认值。(继承自 Attribute) | 
| Match(Object) | 当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。(继承自 Attribute) | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) | 
显式接口实现
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) | 将一组名称映射为对应的一组调度标识符。(继承自 Attribute) | 
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) | 检索对象的类型信息,然后可以使用该信息获取接口的类型信息。(继承自 Attribute) | 
| _Attribute.GetTypeInfoCount(UInt32) | 检索对象提供的类型信息接口的数量(0 或 1)。(继承自 Attribute) | 
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) | 提供对某一对象公开的属性和方法的访问。(继承自 Attribute) |