次の方法で共有


SoapAttributeAttribute クラス

XmlSerializer がクラス メンバをエンコード済みの SOAP 属性としてシリアル化することを指定します。

この型のすべてのメンバの一覧については、SoapAttributeAttribute メンバ を参照してください。

System.Object
   System.Attribute
      System.Xml.Serialization.SoapAttributeAttribute

<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field _
   Or AttributeTargets.Parameter Or AttributeTargets.ReturnValue)>
Public Class SoapAttributeAttribute   Inherits Attribute
[C#]
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field
   | AttributeTargets.Parameter | AttributeTargets.ReturnValue)]
public class SoapAttributeAttribute : Attribute
[C++]
[AttributeUsage(AttributeTargets::Property |
   AttributeTargets::Field | AttributeTargets::Parameter |
   AttributeTargets::ReturnValue)]
public __gc class SoapAttributeAttribute : public Attribute
[JScript]
public
   AttributeUsage(AttributeTargets.Property | AttributeTargets.Field |
   AttributeTargets.Parameter | AttributeTargets.ReturnValue)
class SoapAttributeAttribute extends Attribute

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

SoapAttributeAttribute クラスは、 XmlSerializer がオブジェクトをエンコード済み SOAP XML としてシリアル化または逆シリアル化する方法を制御する一連の属性のうちの 1 つです。結果として生成される XML は、W3C (World Wide Web Consortium) (www.w3.org) のドキュメント『Simple Object Access Protocol (SOAP) 1.1』のセクション 5 に準拠します。類似する属性の完全な一覧については、「 エンコード済み SOAP シリアル化を制御する属性 」を参照してください。

オブジェクトをエンコード済み SOAP メッセージとしてシリアル化するには、 SoapReflectionImporter クラスの ImportTypeMapping メソッドで作成された XmlTypeMapping を使用して、 XmlSerializer を構築する必要があります。

XmlSerializer がパブリック フィールドを XML 属性としてシリアル化することを指定するには、そのフィールドに SoapAttributeAttribute を適用します。属性の代替名を指定するには、 AttributeName プロパティを設定します。属性に対して、特定の XML スキーマ定義言語 (XSD: XML Schema Definition Language) のデータ型を指定する必要がある場合は、 DataType を設定します。属性が特定の XML 名前空間に属する場合は、 Namespace プロパティを設定します。

属性の使用方法については、「 属性を使用したメタデータの拡張 」を参照してください。

メモ   コードでは、 SoapAttributeAttribute の代わりに SoapAttribute という短い語を使用できます。

使用例

[Visual Basic, C#, C++] SoapAttributeAttribute の適用対象となる複数のフィールドが含まれているクラスをシリアル化する例を次に示します。

 
Imports System
Imports System.IO
Imports System.Text
Imports System.Xml
Imports System.Xml.Serialization
Imports System.Xml.Schema

<SoapInclude(GetType(Vehicle))> _
Public Class Group

   <SoapAttribute (Namespace:= "http:'www.cpandl.com")> _
   Public GroupName As String    
   <SoapAttribute(DataType:= "base64Binary")> _
   Public GroupNumber() As  Byte 

   <SoapAttribute(DataType:= "date", AttributeName:= "CreationDate")> _
   Public Today As DateTime 
   <SoapElement(DataType:= "nonNegativeInteger", _
   ElementName:= "PosInt")> _
   Public PostitiveInt As String 

   Public GroupVehicle As Vehicle 
End Class
  
Public Class Vehicle
   Public licenseNumber As String 
End Class

Public Class Run

   Shared Sub Main()
   
      Dim test As Run = New Run()
      test.SerializeObject("SoapAtts.xml")
      test.DeserializeObject("SoapAtts.xml")
   End Sub
   
   Public Sub SerializeObject(filename As String)
   
      ' Create an instance of the XmlSerializer Class that
      ' can generate encoded SOAP messages.
      Dim mySerializer As XmlSerializer  =  ReturnSOAPSerializer()

      Dim myGroup As Group = MakeGroup()
      ' Writing the file requires a TextWriter.
      Dim writer As XmlTextWriter = _
      New XmlTextWriter(filename, Encoding.UTF8)
      writer.Formatting = Formatting.Indented
      writer.WriteStartElement("wrapper")
      ' Serialize the Class, and close the TextWriter.
      mySerializer.Serialize(writer, myGroup)
      writer.WriteEndElement()
      writer.Close()
   End Sub

   Private Function MakeGroup() As Group 
      ' Create an instance of the Class that will be serialized.
      Dim myGroup As Group = New Group()

      ' Set the object properties.
      myGroup.GroupName = ".NET"

      Dim hexByte() As Byte= New Byte(1){Convert.ToByte(100), _
      Convert.ToByte(50)}
      myGroup.GroupNumber = hexByte

      Dim myDate As DateTime = New DateTime(2002,5,2)
      myGroup.Today = myDate
      myGroup.PostitiveInt= "10000"
      myGroup.GroupVehicle = New Vehicle()
      myGroup.GroupVehicle.licenseNumber="1234"
      return myGroup
   End Function       

   Public Sub DeserializeObject(filename As String)
      ' Create an instance of the XmlSerializer Class that
      ' can generate encoded SOAP messages.
      Dim mySerializer As XmlSerializer =  ReturnSOAPSerializer()

      ' Reading the file requires an  XmlTextReader.
      Dim reader As XmlTextReader = _
      New XmlTextReader(filename)
      reader.ReadStartElement("wrapper")

      ' Deserialize and cast the object.
      Dim myGroup As Group 
      myGroup = _
      CType(mySerializer.Deserialize(reader), Group)
      reader.ReadEndElement()
      reader.Close()

   End Sub
   
   private Function ReturnSOAPSerializer() As XmlSerializer 
      ' Create an instance of the XmlSerializer Class.
      Dim myMapping As XmlTypeMapping = _
      (New SoapReflectionImporter().ImportTypeMapping _
      (GetType(Group)))
       return New XmlSerializer(myMapping)
   End Function
End Class

[C#] 
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;

[SoapInclude(typeof(Vehicle))]
public class Group
{
   [SoapAttribute (Namespace = "http://www.cpandl.com")]
   public string GroupName;
   
   [SoapAttribute(DataType = "base64Binary")]
   public Byte [] GroupNumber;

   [SoapAttribute(DataType = "date", AttributeName = "CreationDate")]
   public DateTime Today;
   [SoapElement(DataType = "nonNegativeInteger", ElementName = "PosInt")]
   public string PostitiveInt;

   public Vehicle GroupVehicle;
}
  
public class Vehicle
{
   public string licenseNumber;
}

public class Run
{
   public static void Main()
   {
      Run test = new Run();
      test.SerializeObject("SoapAtts.xml");
      test.DeserializeObject("SoapAtts.xml");
   }
   public void SerializeObject(string filename)
   {
      // Create an instance of the XmlSerializer class that
      // can generate encoded SOAP messages.
      XmlSerializer mySerializer =  ReturnSOAPSerializer();

      Group myGroup=MakeGroup();
      // Writing the file requires a TextWriter.
      XmlTextWriter writer = 
      new XmlTextWriter(filename, Encoding.UTF8);
      writer.Formatting = Formatting.Indented;
      writer.WriteStartElement("wrapper");
      // Serialize the class, and close the TextWriter.
      mySerializer.Serialize(writer, myGroup);
      writer.WriteEndElement();
      writer.Close();
   }

   private Group MakeGroup(){
      // Create an instance of the class that will be serialized.
      Group myGroup = new Group();

      // Set the object properties.
      myGroup.GroupName = ".NET";

      Byte [] hexByte = new Byte[2]{Convert.ToByte(100),
      Convert.ToByte(50)};
      myGroup.GroupNumber = hexByte;

      DateTime myDate = new DateTime(2002,5,2);
      myGroup.Today = myDate;
      myGroup.PostitiveInt= "10000";
      myGroup.GroupVehicle = new Vehicle();
      myGroup.GroupVehicle.licenseNumber="1234";
      return myGroup;
   }       

   public void DeserializeObject(string filename)
   {
      // Create an instance of the XmlSerializer class that
      // can generate encoded SOAP messages.
      XmlSerializer mySerializer =  ReturnSOAPSerializer();

      // Reading the file requires an  XmlTextReader.
      XmlTextReader reader= 
      new XmlTextReader(filename);
      reader.ReadStartElement("wrapper");

      // Deserialize and cast the object.
      Group myGroup; 
      myGroup = (Group) mySerializer.Deserialize(reader);
      reader.ReadEndElement();
      reader.Close();

   }
   
   private XmlSerializer ReturnSOAPSerializer(){
      // Create an instance of the XmlSerializer class.
      XmlTypeMapping myMapping = 
      (new SoapReflectionImporter().ImportTypeMapping
      (typeof(Group)));
       return new XmlSerializer(myMapping);
   }
}

[C++] 
#using <mscorlib.dll>
#using <System.dll>
#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Text;
using namespace System::Xml;
using namespace System::Xml::Serialization;
using namespace System::Xml::Schema;
//using namespace System::Runtime::Remoting::Metadata;

public __gc class Vehicle {
public:
    String* licenseNumber;
};

[SoapInclude(__typeof(Vehicle))]
public __gc class Group {
public:
    [SoapAttributeAttribute (Namespace = S"http://www.cpandl.com")]
    String* GroupName;

    [SoapAttributeAttribute(DataType = S"base64Binary")]
    Byte GroupNumber[];

    [SoapAttributeAttribute(DataType = S"date", AttributeName = S"CreationDate")]
    DateTime Today;

    [SoapElement(DataType = S"nonNegativeInteger", ElementName = S"PosInt")]
    String* PostitiveInt;

    Vehicle* GroupVehicle;
};

public __gc class Run {
public:
    void SerializeObject(String* filename) {
        // Create an instance of the XmlSerializer class that
        // can generate encoded SOAP messages.
        XmlSerializer* mySerializer =  ReturnSOAPSerializer();

        Group* myGroup=MakeGroup();
        // Writing the file requires a TextWriter.
        XmlTextWriter* writer = new XmlTextWriter(filename, Encoding::UTF8);
        writer->Formatting = Formatting::Indented;
        writer->WriteStartElement(S"wrapper");
        // Serialize the class, and close the TextWriter.
        mySerializer->Serialize(writer, myGroup);
        writer->WriteEndElement();
        writer->Close();
    }

private:
    Group* MakeGroup() {
        // Create an instance of the class that will be serialized.
        Group* myGroup = new Group();

        // Set the Object* properties.
        myGroup->GroupName = S".NET";

        Byte hexByte[] = {Convert::ToByte(100),
            Convert::ToByte(50)};
        myGroup->GroupNumber = hexByte;

        DateTime myDate = DateTime(2002, 5, 2);
        myGroup->Today = myDate;
        myGroup->PostitiveInt= S"10000";
        myGroup->GroupVehicle = new Vehicle();
        myGroup->GroupVehicle->licenseNumber=S"1234";
        return myGroup;
    }       

public:
    void DeserializeObject(String* filename) {
        // Create an instance of the XmlSerializer class that
        // can generate encoded SOAP messages.
        XmlSerializer* mySerializer =  ReturnSOAPSerializer();

        // Reading the file requires an  XmlTextReader.
        XmlTextReader* reader = new XmlTextReader(filename);
        reader->ReadStartElement(S"wrapper");

        // Deserialize and cast the Object*.
        Group* myGroup; 
        myGroup = __try_cast<Group*>( mySerializer->Deserialize(reader) );
        reader->ReadEndElement();
        reader->Close();

    }

private:
    XmlSerializer* ReturnSOAPSerializer() {
        // Create an instance of the XmlSerializer class.
        XmlTypeMapping* myMapping = 
            (new SoapReflectionImporter())->ImportTypeMapping(__typeof(Group));
        return new XmlSerializer(myMapping);
    }
};

int main() {
    Run* test = new Run();
    test->SerializeObject(S"SoapAtts.xml");
    test->DeserializeObject(S"SoapAtts.xml");
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Xml.Serialization

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Xml (System.Xml.dll 内)

参照

SoapAttributeAttribute メンバ | System.Xml.Serialization 名前空間 | XmlSerializer | SoapAttributeOverrides | SoapAttribute