الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

درس في الobject serialization او تسلسل الكائنات

بدأه ayash في 8 يونيو 2011 · 8 رد · 2,645 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

-----------------

بدون مقدمات اليوم حابب اكتب درس في الobject serialization بالعربي تسلسل الكائنات

هاذا الموضوع من المواضيع المتقدمة في بيئة ال.NET

قبل لبدء هناك تعريف يجب ان تكون عزيزي القارئ تعلمه وهو

معنى الobject instant او بالعربي نسخة الكائن --->انه عندما نقوم بخلق object من class فانة يتم انشاء مساحة في الذاكرة تحتوي بيانات الobject

بالمختصر هي المنظقة في الذاكرة التي تحمل بيانات object تم انشائه من class.

...........................................................................................................................................................................................

الان نبدأ على بركة الله

معنى object serialization :-هي عملية حفظ object instant في stream

معنى Deserializing:-العكس

ما اهميته :-

الاهمية كبيرة فليس هناالك شيء لا يوجد له اهمية

واهميته تكمن في الابقاء على حياه الobject اي الobject لا يموت ابدا

بحيث يكون محفوظ في مكان في القرص الصلب او ممكن ان تنقله عبر الشبكة وممكن انك تتناقله من flash الى flash

ووقت ما تريد استدعائه تستدعيه

وكيف ذلك الان سوف نرى ذلك بالعملي

سوف اطبق الامثلة بلغة الc# و vb

--------------------------------------------------------------------------------------------------------------------------------------------------

نبدا بالجزء الاول وهو Binary Serialization

الخطوات لعمل الserialization

1-خلق الكائن او الobject من الclass وهذا الobject هو الذي سوف نعمل له الserialization

2-نقوم بعمل stream الذي يحفظ فيه الobject

3-نقوم بخلق object من نوع binary serialization الذي من خلاله اقدر ان استدعي عملية ال serialization التي تستقبل 2parameter الاول يمثل الstream والثاني الobject

خطوات عمل Deserializing

1-عمل مؤشر الذي سوف يشير الobject الذي سوف نستدعيه

2-عمل stream الذي يمثل مسار الobject الذي نريده

3-نقوم بخلق object من binary serialization الذي من خلاله نقدر من استدعاء عملية الDeserialize والتي تستقبل 1parameter وهو الstream وهي ترحع قيمة من نوع object اي يجب عمل لها convert للنوع الذي نريده

الجزء العملي

مثال

c#

هنا عملية serialization

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            serialization();
        }
        //هذه الميثود تمثل عملية ال
        //serialize

        public void serialization()
        {
            //هنا عرفنا مصفوفة من العناصر  التي سوف نطبق علىها العملية
            int[] array = {
			1,
			2,
			3
		};

            //هنا عرفنا المسار الذي سوف نحفظ فيه الكائن
            FileStream stream = File.Open("object.mm", FileMode.OpenOrCreate);

            //هنا عملية  خلق كائن من نوع ال
            //BinaryFormatter
            //التي من خلالها نقدر ان نعمل عملية ال
            //serialize and Deserialize
            //srlilize 
            //تستقبل متحولين الاول يمثل الستريم والثاني الكائن الذي  نريد حفظه
            BinaryFormatter serobj = new BinaryFormatter();
            serobj.Serialize(stream, array);

            stream.Close();
        }

    }
}

وهنا الDeserializing

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Deserializing();
        }


        //هذه الميثود تمثل عملية ال
        //Deserialize


        public void Deserializing()
        {
            int[] array2 = null;
            FileStream stream = File.Open("object.mm", FileMode.OpenOrCreate);

            BinaryFormatter serobj = new BinaryFormatter();

            //هنا عملنا تحولي تحويل للكائن الذي سوف نستدعيه الى النوع الذي نريده وهو
            //integger
            //لانو يرجع من نوع 
            //object

            array2 = ((int[])(serobj.Deserialize(stream)));
            stream.Close();

            //الان لنرى النتيجة
            MessageBox.Show(array2[0].ToString() + "," + array2[1].ToString() + "," + array2[2].ToString());

        }


    }
}

الكود بلغة الvb

اولا serialization

Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary


Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        serialization()

    End Sub
    'هذه الميثود تمثل عملية ال
    'serialize
    Public Sub serialization()

        'هنا عرفنا مصفوفة من العناصر  التي سوف نطبق علىها العملية
        Dim array As Integer() = {1, 2, 3}

        'هنا عرفنا المسار الذي سوف نحفظ فيه الكائن
        Dim stream As FileStream = File.Open("object.mm", FileMode.OpenOrCreate)

        'هنا عملية  خلق كائن من نوع ال
        'BinaryFormatter
        'التي من خلالها نقدر ان نعمل عملية ال
        'serialize and Deserialize
        'srlilize 
        'تستقبل متحولين الاول يمثل الستريم والثاني الكائن الذي  نريد حفظه
        Dim serobj As New BinaryFormatter()
        serobj.Serialize(stream, array)

        stream.Close()
    End Sub



End Class

وهنا العملية العكسية منها

Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary


Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Deserializing()

    End Sub

    'هذه الميثود تمثل عملية ال
    'Deserialize

    Public Sub Deserializing()

        Dim array2 As Integer()
        Dim stream As FileStream = File.Open("object.mm", FileMode.OpenOrCreate)

        Dim serobj As New BinaryFormatter()

        'هنا عملنا تحولي تحويل للكائن الذي سوف نستدعيه الى النوع الذي نريده وهو
        'integger
        'لانو يرجع من نوع 
        'object

        array2 = CType(serobj.Deserialize(stream), Integer())
        stream.Close()

        'الان لنرى النتيجة
        MessageBox.Show(array2(0).ToString() + "," + array2(1).ToString() + "," + array2(2).ToString())

    End Sub


End Class

هكذا نكون انتهينا من الجزء الاول والجزء الثاني بسيط بس اضافة بسيطة للجزء الاول

الجزء الثاني سوف اقوم بشرحة عندما يتسنى لي الوقت إن شاء الله

اسف اذا كان هناك اخطاء او شيء غير مفهوم

وبارك الله فيكم

:) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :)

تم تعديل هذه المشاركة بواسطة ayash في 9 يونيو 2011 في 08:50

291964_260506123967115_206850989332629_1001538_45132_n.jpg

اللهم إني أعوذ بك من علم لا ينفع ، ومن قلب لا يخشع ، ومن نفس لا تشبع ، ومن دعوة لا يستجاب لها

#2

السلام عليكم ورحمه الله وبركاته

اخي ممكن اعرف ليش استخدمت ال BinaryFormatter؟؟ اعتقد ان تمثيلها بال XML سيكون اسهل واوضح

.:: Wish to become better and better ::.

#3

اهلا بيك اخي

اقتباس

اخي ممكن اعرف ليش استخدمت ال BinaryFormatter؟؟ اعتقد ان تمثيلها بال XML سيكون اسهل واوضح

بالنسبة للclass الي استخدمته فهو جاهز من .net framwork

وبسيط استخدامه

وبالنسبة للxml برضو بصير ومن ناحية واضح صحيح كلامك بس استريحت للBinaryFormatter

لاغير :P

إن شاء الله في الجزء الثاني بعطي امثلة عليه ولا اهمك اخوي

تم تعديل هذه المشاركة بواسطة ayash في 8 يونيو 2011 في 12:29

291964_260506123967115_206850989332629_1001538_45132_n.jpg

اللهم إني أعوذ بك من علم لا ينفع ، ومن قلب لا يخشع ، ومن نفس لا تشبع ، ومن دعوة لا يستجاب لها

#4

السلام عليكم ورحمه الله وبركاته

اخي احببت ان انوه ان ال XML Formatter اسهل في التعامل واسرع خصوصا في ال Deserialization ولكن يعتبر اكبر حجما واقل امانا من ال Binary Formatter

.:: Wish to become better and better ::.

#5

صحيح كلامك اخي

291964_260506123967115_206850989332629_1001538_45132_n.jpg

اللهم إني أعوذ بك من علم لا ينفع ، ومن قلب لا يخشع ، ومن نفس لا تشبع ، ومن دعوة لا يستجاب لها

#6
ayash كتب:

نبدا بالجزء الاول وهو Binary Serialization

هذا فقط يطبق على Primitive Types ك الstring , int ,dlouble وهكذا

اي لا يطبق على object من class انت عملتها هذا سوف اشرحه في الجزء الثاني إن شاء الله

من قال أن Binary Serialization لا يطبق مع الكائن من كلاس

ألاحظ ان هناك لبس بين Binary Serialization و xml Serialization حيث أن الاخير لا يحفظ الا الصفات من نوع public أما Binary Serialization فيقوم بحفظ كل أجزاء الكائن سواءا كان من كلاس او كان رقم او نص

ويستخدم Binary Serialization غالبا في حفظ حالة البرنامج نظرا لأنه يحفظ كل شئ

أرجو أن اكون قد أضفت جديدا لكم

وشكرا

قولوا لا اله الا الله تفلحوا

ومن يبتغي غير الاسلام دينا فلن يقبل منه وهو في الاخرة من الخاسرين- صدق الله العظيم

#7
اقتباس

من قال أن Binary Serialization لا يطبق مع الكائن من كلاس

نعم صحيح يطبق لكن المقصود

انه يعرف كيف يطبق التسلسل على هذه الانواع من البيانات primitive type

مشكور اخي على الملاحظة وتصحيح المعلومة سوف اقوم بعمل تصحيح لها

مشكور مرة ثانية

-----------------------------------------------------------------------------------------------------------------

:)

تم تعديل هذه المشاركة بواسطة ayash في 9 يونيو 2011 في 08:54

291964_260506123967115_206850989332629_1001538_45132_n.jpg

اللهم إني أعوذ بك من علم لا ينفع ، ومن قلب لا يخشع ، ومن نفس لا تشبع ، ومن دعوة لا يستجاب لها

#8
ayash كتب:

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

-----------------

بدون مقدمات اليوم حابب اكتب درس في الobject serialization بالعربي تسلسل الكائنات

هاذا الموضوع من المواضيع المتقدمة في بيئة ال.NET

قبل لبدء هناك تعريف يجب ان تكون عزيزي القارئ تعلمه وهو

معنى الobject instant او بالعربي نسخة الكائن --->انه عندما نقوم بخلق object من class فانة يتم انشاء مساحة في الذاكرة تحتوي بيانات الobject

بالمختصر هي المنظقة في الذاكرة التي تحمل بيانات object تم انشائه من class.

...........................................................................................................................................................................................

الان نبدأ على بركة الله

معنى object serialization :-هي عملية حفظ object instant في stream

معنى Deserializing:-العكس

ما اهميته :-

الاهمية كبيرة فليس هناالك شيء لا يوجد له اهمية

واهميته تكمن في الابقاء على حياه الobject اي الobject لا يموت ابدا

بحيث يكون محفوظ في مكان في القرص الصلب او ممكن ان تنقله عبر الشبكة وممكن انك تتناقله من flash الى flash

ووقت ما تريد استدعائه تستدعيه

وكيف ذلك الان سوف نرى ذلك بالعملي

سوف اطبق الامثلة بلغة الc# و vb

--------------------------------------------------------------------------------------------------------------------------------------------------

نبدا بالجزء الاول وهو Binary Serialization

الخطوات لعمل الserialization

1-خلق الكائن او الobject من الclass وهذا الobject هو الذي سوف نعمل له الserialization

2-نقوم بعمل stream الذي يحفظ فيه الobject

3-نقوم بخلق object من نوع binary serialization الذي من خلاله اقدر ان استدعي عملية ال serialization التي تستقبل 2parameter الاول يمثل الstream والثاني الobject

خطوات عمل Deserializing

1-عمل مؤشر الذي سوف يشير الobject الذي سوف نستدعيه

2-عمل stream الذي يمثل مسار الobject الذي نريده

3-نقوم بخلق object من binary serialization الذي من خلاله نقدر من استدعاء عملية الDeserialize والتي تستقبل 1parameter وهو الstream وهي ترحع قيمة من نوع object اي يجب عمل لها convert للنوع الذي نريده

الجزء العملي

مثال

c#

هنا عملية serialization

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            serialization();
        }
        //هذه الميثود تمثل عملية ال
        //serialize

        public void serialization()
        {
            //هنا عرفنا مصفوفة من العناصر  التي سوف نطبق علىها العملية
            int[] array = {
			1,
			2,
			3
		};

            //هنا عرفنا المسار الذي سوف نحفظ فيه الكائن
            FileStream stream = File.Open("object.mm", FileMode.OpenOrCreate);

            //هنا عملية  خلق كائن من نوع ال
            //BinaryFormatter
            //التي من خلالها نقدر ان نعمل عملية ال
            //serialize and Deserialize
            //srlilize 
            //تستقبل متحولين الاول يمثل الستريم والثاني الكائن الذي  نريد حفظه
            BinaryFormatter serobj = new BinaryFormatter();
            serobj.Serialize(stream, array);

            stream.Close();
        }

    }
}

وهنا الDeserializing

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Deserializing();
        }


        //هذه الميثود تمثل عملية ال
        //Deserialize


        public void Deserializing()
        {
            int[] array2 = null;
            FileStream stream = File.Open("object.mm", FileMode.OpenOrCreate);

            BinaryFormatter serobj = new BinaryFormatter();

            //هنا عملنا تحولي تحويل للكائن الذي سوف نستدعيه الى النوع الذي نريده وهو
            //integger
            //لانو يرجع من نوع 
            //object

            array2 = ((int[])(serobj.Deserialize(stream)));
            stream.Close();

            //الان لنرى النتيجة
            MessageBox.Show(array2[0].ToString() + "," + array2[1].ToString() + "," + array2[2].ToString());

        }


    }
}

الكود بلغة الvb

اولا serialization

Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary


Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        serialization()

    End Sub
    'هذه الميثود تمثل عملية ال
    'serialize
    Public Sub serialization()

        'هنا عرفنا مصفوفة من العناصر  التي سوف نطبق علىها العملية
        Dim array As Integer() = {1, 2, 3}

        'هنا عرفنا المسار الذي سوف نحفظ فيه الكائن
        Dim stream As FileStream = File.Open("object.mm", FileMode.OpenOrCreate)

        'هنا عملية  خلق كائن من نوع ال
        'BinaryFormatter
        'التي من خلالها نقدر ان نعمل عملية ال
        'serialize and Deserialize
        'srlilize 
        'تستقبل متحولين الاول يمثل الستريم والثاني الكائن الذي  نريد حفظه
        Dim serobj As New BinaryFormatter()
        serobj.Serialize(stream, array)

        stream.Close()
    End Sub



End Class

وهنا العملية العكسية منها

Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary


Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Deserializing()

    End Sub

    'هذه الميثود تمثل عملية ال
    'Deserialize

    Public Sub Deserializing()

        Dim array2 As Integer()
        Dim stream As FileStream = File.Open("object.mm", FileMode.OpenOrCreate)

        Dim serobj As New BinaryFormatter()

        'هنا عملنا تحولي تحويل للكائن الذي سوف نستدعيه الى النوع الذي نريده وهو
        'integger
        'لانو يرجع من نوع 
        'object

        array2 = CType(serobj.Deserialize(stream), Integer())
        stream.Close()

        'الان لنرى النتيجة
        MessageBox.Show(array2(0).ToString() + "," + array2(1).ToString() + "," + array2(2).ToString())

    End Sub


End Class

هكذا نكون انتهينا من الجزء الاول والجزء الثاني بسيط بس اضافة بسيطة للجزء الاول

الجزء الثاني سوف اقوم بشرحة عندما يتسنى لي الوقت إن شاء الله

اسف اذا كان هناك اخطاء او شيء غير مفهوم

وبارك الله فيكم

:) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :)

السلام عليكم ورحمة الله وبركاته:

شكرا كتير ع الفكرة بس عندي سؤال وهو كالتالي في حالة مثلا بعتت الملف اللي عملتلو سلسلة وفجأة انقطع الاتصال كيف ممكن اكمل إرسال الملف من المكان اللي وقف عندو الارسال مع العلم انو في طريقة ممكن قسم فيها الملف الى قطع باستخدام بروتوكول tcp هون ممكن قسم الملف لقطع وبنفس الوقت اعملو سلسة وشكرا جزيلا.

#9
اقتباس

السلام عليكم ورحمة الله وبركاته:

شكرا كتير ع الفكرة بس عندي سؤال وهو كالتالي في حالة مثلا بعتت الملف اللي عملتلو سلسلة وفجأة انقطع الاتصال كيف ممكن اكمل إرسال الملف من المكان اللي وقف عندو الارسال مع العلم انو في طريقة ممكن قسم فيها الملف الى قطع باستخدام بروتوكول tcp هون ممكن قسم الملف لقطع وبنفس الوقت اعملو سلسة وشكرا جزيلا.

فكرة ارسال الملف على الشبكة مثل فكرة ارسال اي ملف اخر.

تم تعديل هذه المشاركة بواسطة ayash في 21 يناير 2012 في 10:13

291964_260506123967115_206850989332629_1001538_45132_n.jpg

اللهم إني أعوذ بك من علم لا ينفع ، ومن قلب لا يخشع ، ومن نفس لا تشبع ، ومن دعوة لا يستجاب لها

مواضيع مشابهة