none
(Sumber: milist DOTNET) serializable RRS feed

  • Pertanyaan

  • temen2

    terkadang sy liat kode yg diatas method atau function nya ada tulisan [Serializable]

     

    ada yg berkenan memberi penjelasannya mksd utk apa ya? dan fungsinya digunakan utk apa? apa yg terjadi jika tdk diberikan [Serializable] ?


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Rabu, 09 November 2011 09.10
    Moderator

Jawaban

  • Penempatan atribut [Serilializable()] pada sebuah object di C# adalah untuk menandakan bahwa object tersebut bisa atau boleh di jadikan bentuk serial. Bentuk serial adalah dimana esensi atau substansi sebuah object diubah bentuk identifikasinya menjadi semacam skema dan data dalam sebuah rangkaian seri. Skema dan data ini nantinya bisa anda simpan menjadi bentuk binary atau XML. Ini saya buatkan contoh sederhana untuk anda bisa memahaminya. Contoh dibawah ini ceritanya anda ingin melakukan serialisasi object MyClass menjadi bentuk biner dengan representasi string Base64, kemudian dikembalikan atau di deserialisasi kembali menjadi bentuk object sesungguhnya yaitu MyClass. Artinya Base64 disini hanya agar bentuk binary byte[] tersebut bisa saya tuliskan kedalam bentuk string. Sebetulnya tidak perlu pakai Base64 juga tidak apa2, ini hanya untuk contoh saja supaya bisa dilihat representasinya.

     

    using System;

    using System.IO;

    using System.Runtime.Serialization.Formatters.Binary;

     

    namespace ConsoleApplication1

    {

        class Program

        {

            [Serializable]        // Atribut menandakan bisa di Serialisasikan

            public class MyClass  // Object yang akan di Serialkan

            {

                public string NamaDepan { getset; }

                public string NamaBelakang { getset; }

            }

     

            static void Main(string[] args)

            {

                MyClass obj = new MyClass();

                obj.NamaDepan = "Vera";

                obj.NamaBelakang = "Retnowati";

     

                // Serialisasi object dan simpan didalam string myClassSerial

                string myClassSerial = SerializeObject(obj);

                Console.WriteLine("Hasil Serialisasi:\n{0}\n\n", myClassSerial);

     

                // Proses deserialisasi string myClassSerial menjadi bentuk object

                object objdes = DeserializeObject(myClassSerial);

                Console.WriteLine("Tipe Object hasil deserialisasi: {0}\n", objdes.GetType().Name);

     

                MyClass obj2 = objdes as MyClass;

                Console.WriteLine("Hasil Deserialisasi");

                Console.WriteLine("Nama Depan: {0}\nNama Belakang: {1}\n",

                    obj2.NamaDepan, obj2.NamaBelakang);

     

                Console.ReadLine();

            }

     

            /// <summary>

            /// Serialisasi object menjadi bentuk binary dengan representasi string Base64

            /// </summary>

            static string SerializeObject(object obj)

            {

                MemoryStream ms = new MemoryStream();

                BinaryFormatter formatter = new BinaryFormatter();

                formatter.Serialize(ms, obj);

                string result = Convert.ToBase64String(ms.ToArray(),

                                Base64FormattingOptions.None);

                ms.Close();

                ms.Dispose();

                return result;

            }

     

            /// <summary>

            /// Deserialisasi object dari bentuk string Base64 menjadi object sesungguhnya

            /// </summary>

            static object DeserializeObject(string strobj)

            {

                MemoryStream ms = new MemoryStream(Convert.FromBase64String(strobj));

                BinaryFormatter formatter = new BinaryFormatter();

                object result = formatter.Deserialize(ms);

                ms.Close();

                ms.Dispose();

                return result;

            }

        }

    }

     

    Dan ini hasil output-nya bila dijalankan,

     

    Hasil Serialisasi:

    AAEAAAD/////AQAAAAAAAAAMAgAAAEpDb25zb2xlQXBwbGljYXRpb24xLCBWZXJzaW9uPTEuMC4wLjAs

    IEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAI0NvbnNvbGVBcHBsaWNhdGlv

    bjEuUHJvZ3JhbStNeUNsYXNzAgAAABo8TmFtYURlcGFuPmtfX0JhY2tpbmdGaWVsZB08TmFtYUJlbGFr

    YW5nPmtfX0JhY2tpbmdGaWVsZAEBAgAAAAYDAAAABFZlcmEGBAAAAAlSZXRub3dhdGkL

     

     

    Tipe Object hasil deserialisasi: MyClass

     

    Hasil Deserialisasi

    Nama Depan: Vera

    Nama Belakang: Retnowati

     

    Sekarang coba hilangkan atribut [Serilializable()] pada class MyClass diatas dan jalankan kembali programnya. Paham kan! Gunanya serialisasi object sangat banyak. Misalnya bila anda ingin menyimpan object tersebut dalam bentuk file atau string. Atau anda ingin mengirim object tersebut melalui internet dan diterima ditempat lain. Atau anda bisa simpan object tersebut di dalam database column dan sebagainya. Banyak deh.

     

    Mudah2an bisa dipahami.

     

    Dijawab oleh: Riza Marhaban

     


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Rabu, 09 November 2011 09.13
    Moderator