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

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

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

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

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

TimeSpan のシリアル化

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

バージョン情報

.NET FrameworkSoapFormatterのバージョン間のシリアル化の互換性はサポートされていません。 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)

適用対象