SoapFormatter 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
以 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 介面允許指定兩個不同的物件圖形:要串行化物件的圖形,以及包含標頭物件陣列的其他圖形,這些物件會傳達遠端函數呼叫的相關信息 (,例如交易標識符或方法簽章) 。 若要進行適當的串行化,第一個圖形的根對象必須是實 IMethodCallMessage 作 介面或 IMethodReturnMessage 介面的物件。
在 RPC 還原串行化期間, HeaderHandler 會將委派指定給 Deserialize 格式子的方法。 遠端基礎結構會 HeaderHandler 使用 委派來產生支援 ISerializable 介面的物件。 此物件包含儲存在標頭中的資訊,並成為還原串行化程式所傳回之圖形的根目錄。
SoapFormatter也可以處理與實ISoapMessage作 介面之 物件一起產生的 RPC。 若要在不使用功能的情況下 IRemotingFormatter 建立 RPC,請將支援 ISoapMessage 介面的物件放在要串行化之圖形的根目錄。 若要還原串行化以此方式建立的 RPC, TopObject 屬性必須設定為支援 介面的另一個物件 ISoapMessage ,並包含相關的遠端呼叫資訊。
TimeSpan 物件會根據 ISO 8601:1998 第 5.5.3.2.1 節「替代」標準進行串行化。
建構函式
SoapFormatter() |
使用預設屬性值,初始化 SoapFormatter 類別的新執行個體。 |
SoapFormatter(ISurrogateSelector, StreamingContext) |
使用指定的 SoapFormatter 和 ISurrogateSelector,初始化 StreamingContext 類別的新執行個體。 |
屬性
AssemblyFormat |
取得或設定有關尋找和載入組件之還原序列化程式的行為。 |
Binder |
取得或設定控制將序列化物件繫結至型別的 SerializationBinder。 |
Context |
取得或設定與此 StreamingContext 一起使用的 SoapFormatter。 |
FilterLevel |
取得或設定 .NET Framework 遠端之自動還原序列化的 TypeFilterLevel。 |
SurrogateSelector |
取得或設定在序列化和還原序列化期間控制型別替代的 SurrogateSelector。 |
TopObject |
取得或設定 ISoapMessage,做為 SOAP 上層物件還原序列化的目標。 |
TypeFormat |
取得或設定型別描述在已序列化資料流中的配置格式。 |
方法
Deserialize(Stream) |
還原序列化在提供的資料流上的資料,並重新組合物件 Graph。 |
Deserialize(Stream, HeaderHandler) |
將資料流還原序列化至物件圖形中,使用指定的 HeaderHandler 處理該資料流中的任何標頭。 |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
Serialize(Stream, Object) |
使用指定的根,將物件或物件的圖形序列化至指定的 Stream。 |
Serialize(Stream, Object, Header[]) |
使用指定的根,將物件或物件圖形序列化至 SOAP 遠端程序呼叫 (RPC) 格式的指定 Stream。 |
ToString() |
傳回代表目前物件的字串。 (繼承來源 Object) |