Makale Özeti

SOAP serialization yöntemi, xml serialization’ının özel bir hali gibi düşünülebilir. Çünkü serialization işlemi, SOAP (Simple Object Access Protocol) protokolüne uygun bir xml stream’i üzerinde gerçekleştirilir.

Makale

SOAP Serialization

       SOAP serialization yöntemi, xml serialization’ının özel bir hali gibi düşünülebilir. Çünkü serialization işlemi, SOAP (Simple Object Access Protocol) protokolüne uygun bir xml stream’i üzerinde gerçekleştirilir. .NET Framework Class Library’de, SOAP serialization yöntemini gerçekleştirmek üzere, SoapFormatter isimli bir sınıf bulunmaktadır.

       Ancak bu sınıfın bulunduğu bileşen diğer formatter nesnelerinden farklı olarak, “mscorlib.dll” içerisinde bulunmamakta ve bu nedenle kullanımı için, içerisinde yer aldığı “System.Runtime.Serialization.Formatters.Soap.dll” isimli bileşenin referanse edilmesi gerekmektedir. SoapFormatter sınıfı da, serialization/deserialization işlemlerini gerçekleştirmek üzere Serialize() ve Deserialize() isimli metotları içermektedir.

Public Overridable Sub Serialize( _
    
ByVal serializationStream As Stream, _
    
ByVal graph As Object _ )
Implements IFormatter.Serialize

public virtual void Serialize(
     Stream serializationStream,
     object graph
);

      Serialize() metodu; ikinci parametresine geçirilen nesne referansının gösterdiği bellek bölgesindeki verileri, ikinci parametresine geçirilen stream içerisine, SOAP Protokolüne uygun olarak serialize eder.

Örnek : Aşağıdaki uygulamada yazılmış olan SerializeToSOAP() isimli metot; parametresine aldığı nesneyi, SoapFormatter sınıfını kullanarak, Deneme.xml isimli bir dosya içerisine serialize etmektedir. Test kodunda bu metoda “oArr” isimli bir string dizisi geçirilmiştir. Uygulamanın çalışması ile elde edilen dosyanın içeriği şekilde gözlenmektedir.

Public Sub SerializeToSOAP(ByVal obj As Object)
    Dim oFile As FileStream
    oFile = New FileStream("C:\Deneme.xml",_
    FileMode.Create)
    Dim oSoap As New SoapFormatter
    oSoap.Serialize(oFile, obj)
    oFile.Close()
End Sub

Sub Main()
    Dim oArr(4) As String
    oArr(0) = "Aykut"
    oArr(1) = "Attila"
    oArr(2) = "Guray"
    oArr(3) = "Mustafa"
    SerializeToSOAP(oArr)
End Sub

Sekil

Şekil

[C#]

public static void SerializeToSOAP(object obj)
{
    FileStream oFile;
    oFile = new FileStream("C:\\Deneme.xml",_
    FileMode.Create);
    SoapFormatter oSoap = new SoapFormatter();
    oSoap.Serialize(oFile, obj);
    oFile.Close();
}

static void Main(string[] args)
{
    string[] oArr={"Aykut","Attila","Guray","Mustafa"};
    SerializeToSOAP(oArr);
}

       Deserialize() metodu ise; parametresine geçirilen stream içerisindeki verileri, belleğe geri yükler ve bu bellek bölgesinin başlangıç adresini gösteren, object sınıfı türünde bir referans döndürür. Bu referans değeri, ilgili türe dönüşüm yapılarak kullanılabilir.

Public Overridable Function Deserialize( _
    ByVal serializationStream As Stream _
) As < SPAN style="COLOR: black; TEXT-DECORATION: none; text-underline: none">Object Implements IFormatter.Deserialize

public virtual < SPAN style="COLOR: black; TEXT-DECORATION: none; text-underline: none">object Deserialize(
   Stream serializationStream
);

Bu bağlamda Deserialize() metodunun kullanımı şöyle örneklenebilir;

[VB.NET]
Dim oFile As FileStream
oFile = New FileStream("C:\Deneme.xml",_
FileMode.Open)
Dim oSoap As New SoapFormatter
Dim Arr() As String
Arr = oSoap.Deserialize(oFile)
Dim i As Integer
For i = 0 To Arr.Length - 1
   
Console.WriteLine(Arr(i))
Next
oFile.Close()

[C#]
FileStream oFile;
oFile = new FileStream("C:\\Deneme.xml",
FileMode.Open);
SoapFormatter oSoap = new SoapFormatter();
string[] Arr = (string[]) oSoap.Deserialize(oFile);

int i=0;
for (i=0; i < Arr.Length; ++i) {
    Console.WriteLine(Arr[i].ToString());
}
oFile.Close();