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 セキュリティガイド」を参照してください。

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

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

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

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

TimeSpan のシリアル化

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

バージョン情報

は、 SoapFormatter .NET Framework のバージョン間のシリアル化の互換性をサポートしていません。 多くの場合、フレームワークのバージョン1.1 と2.0 の間のシリアル化は失敗します。 この問題を解決するには、次の操作を実行します。

  • を変換して、1.1 と2.0 の間の互換性を提供するを使用し BinaryFormatter ます。

  • 既存の永続化データを新しい形式に変換します。

  • シリアル化されたデータのすべてのプロデューサーとコンシューマーをバージョン2.0 に変換します。

  • 1.1 から2.0 に変更された型の使用は避けてください。

コンストラクター

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)

適用対象