SoapFormatter 클래스

정의

개체나 연결된 개체의 전체 그래프를 SOAP 형식으로 serialize 및 deserialize합니다.Serializes and deserializes an object, or an entire graph of connected objects, in SOAP format.

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 부터는 사용 되지 않습니다.Beginning with the .NET Framework 2.0, this class is obsolete. 대신 BinaryFormatter를 사용하세요.Use BinaryFormatter instead.

SoapFormatterBinaryFormatter 클래스 구현 합니다 IRemotingFormatter 원격 프로시저 호출 (Rpc)을 지원 하기 위해 인터페이스 및 IFormatter 인터페이스 (에서 상속는 IRemotingFormatter) 개체 그래프 serialization을 지원 합니다.The SoapFormatter and BinaryFormatter classes implement the IRemotingFormatter interface to support remote procedure calls (RPCs), and the IFormatter interface (inherited by the IRemotingFormatter) to support serialization of a graph of objects. 합니다 SoapFormatter 클래스에서는 Rpc ISoapMessage 개체를 사용 하지 않고는 IRemotingFormatter 기능.The SoapFormatter class also supports RPCs with ISoapMessage objects, without using the IRemotingFormatter functionality.

Rpc를 하는 동안는 IRemotingFormatter 인터페이스를 사용 하면 두 개의 별도 개체 그래프의 사양을: (원격 함수 호출에 대 한 정보를 전달 하는 헤더 개체의 배열을 포함 하는 그래프를 추가 하 고 serialize 할 개체 그래프 예, 트랜잭션 ID 또는 메서드 서명을).During RPCs, the IRemotingFormatter interface allows the specification of two separate object graphs: the graph of objects to serialize, and an additional graph that contains an array of header objects that convey information about the remote function call (for example, transaction ID or a method signature). 적절 한 serialization에 대 한 첫 번째 그래프의 루트 개체 중 하나를 구현 하는 개체 여야 합니다 IMethodCallMessage 인터페이스 또는 IMethodReturnMessage 인터페이스입니다.For proper serialization, the root object of the first graph must be an object that implements either the IMethodCallMessage interface or the IMethodReturnMessage interface.

RPC 역직렬화 하는 동안를 HeaderHandler 대리자에 지정 된 된 Deserialize 포맷터의 메서드.During deserialization of an RPC, a HeaderHandler delegate is specified to the Deserialize method of the formatter. 원격 인프라를 사용 합니다 HeaderHandler 지 원하는 개체를 생성 하는 대리자는 ISerializable 인터페이스입니다.The remoting infrastructure uses the HeaderHandler delegate to produce an object that supports the ISerializable interface. 이 개체는 머리글에 저장 된 정보를 포함 및 deserializer에 의해 반환 된 그래프의 루트가 됩니다.This object contains the information stored in the headers, and becomes the root of the graph returned by the deserializer.

합니다 SoapFormatter 구현 하는 개체를 사용 하 여 생성 되는 Rpc를 처리할 수도 있습니다는 ISoapMessage 인터페이스입니다.The SoapFormatter can also handle RPCs that are produced with objects that implement the ISoapMessage interface. RPC를 사용 하지 않고 만드는 합니다 IRemotingFormatter 기능을 지 원하는 개체를 현재 위치를 ISoapMessage serialize 되는 그래프의 루트에 있는 인터페이스입니다.To create an RPC without using the IRemotingFormatter functionality, place an object that supports the ISoapMessage interface at the root of a graph being serialized. 이 방식으로 만든 RPC를 deserialize 하는 데는 TopObject 지 원하는 다른 개체에 속성을 설정 해야 합니다 ISoapMessage 인터페이스 및 관련 원격 호출 정보를 포함 합니다.To deserialize an RPC created in this manner the TopObject property must be set to another object that supports the ISoapMessage interface, and contains the relevant remote call information.

TimeSpan SerializationTimeSpan Serialization

TimeSpan 개체는 ISO 8601: 1998 5.5.3.2.1 섹션 "대체" 표준에 따라 직렬화 됩니다.TimeSpan objects are serialized according to the ISO 8601: 1998 section 5.5.3.2.1 "Alternative" standard.

버전 정보Version Information

SoapFormatter .NET Framework의 버전 간에 직렬화 호환성을 지원 하지 않습니다.The SoapFormatter does not support serialization compatibility between versions of the .NET Framework. 종종 Framework의 버전 1.1 및 2.0 형식 간에 serialization에 실패합니다.Serialization between versions 1.1 and 2.0 types in the Framework often fails. 이 문제를 해결 하려면 다음 작업을 수행할 수 있습니다:The following actions can be taken to remedy this issue:

  • 사용 하도록 변환 된 BinaryFormatter, 1.1 및 2.0 간의 호환성을 제공 하는 합니다.Convert to use the BinaryFormatter, which provides compatibility between 1.1 and 2.0.

  • 새 형식으로 보관 된 기존 데이터를 변환 합니다.Convert existing persisted data to the new format.

  • 모든 생산자와 소비자가 직렬화 된 데이터의 2.0 버전으로 변환 합니다.Convert all producers and consumers of serialized data to version 2.0.

  • 1.1에서 2.0으로 변경 하는 사용 하지 마십시오.Avoid using types that changed from 1.1 to 2.0.

생성자

SoapFormatter()

기본 속성 값으로 SoapFormatter 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the SoapFormatter class with default property values.

SoapFormatter(ISurrogateSelector, StreamingContext)

지정된 SoapFormatterISurrogateSelector를 사용하여 StreamingContext 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the SoapFormatter class with the specified ISurrogateSelector and StreamingContext.

속성

AssemblyFormat

어셈블리를 찾고 로드하는 작업과 관련된 deserializer 동작을 가져오거나 설정합니다.Gets or sets the behavior of the deserializer with regards to finding and loading assemblies.

Binder

특정 형식으로 serialize된 개체의 바인딩을 제어하는 SerializationBinder를 가져오거나 설정합니다.Gets or sets the SerializationBinder that controls the binding of a serialized object to a type.

Context

StreamingContext와 함께 사용되는 SoapFormatter를 가져오거나 설정합니다.Gets or sets the StreamingContext used with this SoapFormatter.

FilterLevel

.NET Framework Remoting에 대한 자동 serialization의 TypeFilterLevel을 가져오거나 설정합니다.Gets or sets the TypeFilterLevel of automatic deserialization for .NET Framework remoting.

SurrogateSelector

serialization 및 deserialization을 수행하는 동안 형식 대체를 제어하는 SurrogateSelector를 가져오거나 설정합니다.Gets or sets the SurrogateSelector that controls type substitution during serialization and deserialization.

TopObject

SOAP 최상위 개체가 deserialize되는 ISoapMessage를 가져오거나 설정합니다.Gets or sets the ISoapMessage into which the SOAP top object is deserialized.

TypeFormat

serialize된 스트림에서 형식 설명을 레이아웃하는 형식을 가져오거나 설정합니다.Gets or sets the format in which type descriptions are laid out in the serialized stream.

메서드

Deserialize(Stream)

제공된 스트림의 데이터를 deserialize하고 개체의 그래프를 다시 구성합니다.Deserializes the data on the provided stream and reconstitutes the graph of objects.

Deserialize(Stream, HeaderHandler)

지정된 HeaderHandler에서 처리하는 스트림의 모든 헤더와 함께 해당 스트림을 개체 그래프로 deserialize합니다.Deserializes the stream into an object graph with any headers in that stream being handled by the given HeaderHandler.

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
Serialize(Stream, Object)

지정된 루트를 갖는 개체 그래프 또는 개체를 지정된 Stream으로 serialize합니다.Serializes an object or graph of objects with the specified root to the given Stream.

Serialize(Stream, Object, Header[])

지정된 루트를 갖는 개체 그래프 또는 개체를 SOAP RPC(원격 프로시저 호출) 형식의 지정된 Stream으로 serialize합니다.Serializes an object or graph of objects with the specified root to the given Stream in the SOAP Remote Procedure Call (RPC) format.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

적용 대상