SoapFormatter クラス

定義

オブジェクト、または連結された複数のオブジェクトから成るグラフ全体を、SOAP 形式でシリアル化および逆シリアル化します。

public ref class SoapFormatter sealed : System::Runtime::Remoting::Messaging::IRemotingFormatter
public sealed class SoapFormatter : System.Runtime.Remoting.Messaging.IRemotingFormatter
type SoapFormatter = class
    interface IRemotingFormatter
    interface IFormatter
Public NotInheritable Class SoapFormatter
Implements IRemotingFormatter
継承
SoapFormatter
実装

#using <system.dll>
#using <system.runtime.serialization.formatters.soap.dll>

using namespace System;
using namespace System::IO;
using namespace System::Collections;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Soap;
void Serialize()
{
   
   // Create a hashtable of values that will eventually be serialized.
   Hashtable^ addresses = gcnew Hashtable;
   addresses->Add( "Jeff", "123 Main Street, Redmond, WA 98052" );
   addresses->Add( "Fred", "987 Pine Road, Phila., PA 19116" );
   addresses->Add( "Mary", "PO Box 112233, Palo Alto, CA 94301" );
   
   // To serialize the hashtable (and its keys/values), 
   // you must first open a stream for writing.
   // We will use a file stream here.
   FileStream^ fs = gcnew FileStream( "DataFile.soap",FileMode::Create );
   
   // Construct a SoapFormatter and use it 
   // to serialize the data to the stream.
   SoapFormatter^ formatter = gcnew SoapFormatter;
   try
   {
      formatter->Serialize( fs, addresses );
   }
   catch ( SerializationException^ e ) 
   {
      Console::WriteLine( "Failed to serialize. Reason: {0}", e->Message );
      throw;
   }
   finally
   {
      fs->Close();
   }

}

void Deserialize()
{
   
   // Declare the hashtable reference.
   Hashtable^ addresses = nullptr;
   
   // Open the file containing the data that we want to deserialize.
   FileStream^ fs = gcnew FileStream( "DataFile.soap",FileMode::Open );
   try
   {
      SoapFormatter^ formatter = gcnew SoapFormatter;
      
      // Deserialize the hashtable from the file and 
      // assign the reference to our local variable.
      addresses = dynamic_cast<Hashtable^>(formatter->Deserialize( fs ));
   }
   catch ( SerializationException^ e ) 
   {
      Console::WriteLine( "Failed to deserialize. Reason: {0}", e->Message );
      throw;
   }
   finally
   {
      fs->Close();
   }

   
   // To prove that the table deserialized correctly, 
   // display the keys/values to the console.
   IEnumerator^ myEnum = addresses->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry^ de = safe_cast<DictionaryEntry^>(myEnum->Current);
      Console::WriteLine( " {0} lives at {1}.", de->Key, de->Value );
   }
}


[STAThread]
int main()
{
   Serialize();
   Deserialize();
}
using System;
using System.IO;
using System.Collections;
using System.Runtime.Serialization;

// Note: When building this code, you must reference the
// System.Runtime.Serialization.Formatters.Soap.dll assembly.
using System.Runtime.Serialization.Formatters.Soap;

class App
{
    [STAThread]
    static void Main()
    {
        Serialize();
        Deserialize();
    }

    static void Serialize()
    {
        // Create a hashtable of values that will eventually be serialized.
        Hashtable addresses = new Hashtable();
        addresses.Add("Jeff", "123 Main Street, Redmond, WA 98052");
        addresses.Add("Fred", "987 Pine Road, Phila., PA 19116");
        addresses.Add("Mary", "PO Box 112233, Palo Alto, CA 94301");

        // To serialize the hashtable (and its key/value pairs),
        // you must first open a stream for writing.
        // Use a file stream here.
        FileStream fs = new FileStream("DataFile.soap", FileMode.Create);

        // Construct a SoapFormatter and use it
        // to serialize the data to the stream.
        SoapFormatter formatter = new SoapFormatter();
        try
        {
            formatter.Serialize(fs, addresses);
        }
        catch (SerializationException e)
        {
            Console.WriteLine("Failed to serialize. Reason: " + e.Message);
            throw;
        }
        finally
        {
            fs.Close();
        }
    }

    static void Deserialize()
    {
        // Declare the hashtable reference.
        Hashtable addresses  = null;

        // Open the file containing the data that you want to deserialize.
        FileStream fs = new FileStream("DataFile.soap", FileMode.Open);
        try
        {
            SoapFormatter formatter = new SoapFormatter();

            // Deserialize the hashtable from the file and
            // assign the reference to the local variable.
            addresses = (Hashtable) formatter.Deserialize(fs);
        }
        catch (SerializationException e)
        {
            Console.WriteLine("Failed to deserialize. Reason: " + e.Message);
            throw;
        }
        finally
        {
            fs.Close();
        }

        // To prove that the table deserialized correctly,
        // display the key/value pairs to the console.
        foreach (DictionaryEntry de in addresses)
        {
            Console.WriteLine("{0} lives at {1}.", de.Key, de.Value);
        }
    }
}
Imports System.IO
Imports System.Collections
Imports System.Runtime.Serialization

' Note: When building this code, you must reference the
' System.Runtime.Serialization.Formatters.Soap.dll assembly.
Imports System.Runtime.Serialization.Formatters.Soap


Module App

   Sub Main()
      Serialize()
      Deserialize()
   End Sub

   Sub Serialize()
      ' Create a hashtable of values that will eventually be serialized.
      Dim addresses As New Hashtable
      addresses.Add("Jeff", "123 Main Street, Redmond, WA 98052")
      addresses.Add("Fred", "987 Pine Road, Phila., PA 19116")
      addresses.Add("Mary", "PO Box 112233, Palo Alto, CA 94301")

      ' To serialize the hashtable (and its key/value pairs), 
      ' you must first open a stream for writing.
      ' Use a file stream here.
      Dim fs As New FileStream("DataFile.soap", FileMode.Create)

      ' Construct a SoapFormatter and use it 
      ' to serialize the data to the stream.
      Dim formatter As New SoapFormatter
      Try
         formatter.Serialize(fs, addresses)
      Catch e As SerializationException
         Console.WriteLine("Failed to serialize. Reason: " & e.Message)
         Throw
      Finally
         fs.Close()
      End Try
   End Sub


   Sub Deserialize()
      ' Declare the hashtable reference.
      Dim addresses As Hashtable = Nothing

      ' Open the file containing the data that you want to deserialize.
      Dim fs As New FileStream("DataFile.soap", FileMode.Open)
      Try
         Dim formatter As New SoapFormatter

         ' Deserialize the hashtable from the file and 
         ' assign the reference to the local variable.
         addresses = DirectCast(formatter.Deserialize(fs), Hashtable)
      Catch e As SerializationException
         Console.WriteLine("Failed to deserialize. Reason: " & e.Message)
         Throw
      Finally
         fs.Close()
      End Try

      ' To prove that the table deserialized correctly, 
      ' display the key/value pairs to the console.
      Dim de As DictionaryEntry
      For Each de In addresses
         Console.WriteLine("{0} lives at {1}.", de.Key, de.Value)
      Next
   End Sub
End Module

注釈

注意

.NET Framework 2.0 以降、このクラスは廃止されました。

警告

BinaryFormatter は安全ではなく、セキュリティで保護することはできません。 詳細については、「BinaryFormatter セキュリティ ガイド」をご覧ください。

クラスと BinaryFormatter クラスはSoapFormatter、 インターフェイスをIRemotingFormatter実装してリモート プロシージャ コール (RPC) をサポートしIFormatter、オブジェクトのグラフのシリアル化をサポートするインターフェイス (によってIRemotingFormatter継承) を実装します。 クラスではSoapFormatter、 機能を使用せずに、オブジェクトを含IRemotingFormatterISoapMessage RPC もサポートされます。

RPC では、インターフェイスを使用して、 IRemotingFormatter シリアル化するオブジェクトのグラフと、リモート関数呼び出しに関する情報を伝達するヘッダー オブジェクトの配列 (トランザクション ID やメソッド シグネチャなど) を含む追加のグラフという 2 つの個別のオブジェクト グラフを指定できます。 適切なシリアル化を行うには、最初のグラフのルート オブジェクトが、インターフェイスまたはIMethodReturnMessageインターフェイスをIMethodCallMessage実装するオブジェクトである必要があります。

RPC の逆シリアル化中に、 HeaderHandler フォーマッタの メソッドに Deserialize デリゲートが指定されます。 リモート処理インフラストラクチャでは、 デリゲートを HeaderHandler 使用して、 インターフェイスをサポートするオブジェクトを ISerializable 生成します。 このオブジェクトにはヘッダーに格納されている情報が含まれており、逆シリアライザーによって返されるグラフのルートになります。

では SoapFormatter 、 インターフェイスを実装 ISoapMessage するオブジェクトで生成される RPC を処理することもできます。 機能を使用せずに RPC を IRemotingFormatter 作成するには、シリアル化されるグラフのルートにインターフェイスを ISoapMessage サポートする オブジェクトを配置します。 この方法で作成された RPC を逆シリアル化するには、 TopObject インターフェイスをサポートし、関連するリモート呼び出し情報を ISoapMessage 含む別のオブジェクトにプロパティを設定する必要があります。

TimeSpan オブジェクトは、ISO 8601: 1998 セクション 5.5.3.2.1 の "代替" 標準に従ってシリアル化されます。

コンストラクター

SoapFormatter()

SoapFormatter クラスの新しいインスタンスを既定のプロパティ値で初期化します。

SoapFormatter(ISurrogateSelector, StreamingContext)

指定された SoapFormatterISurrogateSelector を使用して、StreamingContext クラスの新しいインスタンスを初期化します。

プロパティ

AssemblyFormat

アセンブリの検索と読み込みに関するデシリアライザーの動作を取得または設定します。

Binder

シリアル化されたオブジェクトから型へのバインディングを制御する、SerializationBinder を取得または設定します。

Context

この StreamingContext で使用する SoapFormatter を取得または設定します。

FilterLevel

.NET Framework のリモート処理用の自動逆シリアル化の TypeFilterLevel を取得または設定します。

SurrogateSelector

シリアル化中および逆シリアル化中に行われる型の置換を制御する SurrogateSelector を取得または設定します。

TopObject

SOAP の先頭オブジェクトの逆シリアル化先である ISoapMessage を取得または設定します。

TypeFormat

シリアル化されたストリームにおける型の記述のレイアウト形式を取得または設定します。

メソッド

Deserialize(Stream)

指定されたストリームのデータを逆シリアル化し、オブジェクトのグラフを再構成します。

Deserialize(Stream, HeaderHandler)

ストリームをオブジェクト グラフに逆シリアル化し、そのストリーム内にヘッダーがある場合は、指定した HeaderHandler によってそのヘッダーを処理します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
Serialize(Stream, Object)

オブジェクト、またはルートを指定したオブジェクト グラフを、指定した Stream にシリアル化します。

Serialize(Stream, Object, Header[])

オブジェクト、またはルートを指定したオブジェクト グラフを、指定した Stream に SOAP リモート プロシージャ コール (RPC: Remote Procedure Call) 形式でシリアル化します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象