
ToString.FileStream ליצירת קובץ (Person.bin) ויוצרים BinaryFormatter. קוראים ל-Serialize עם הסטרים והאובייקט, ובסוף סוגרים את הסטרים.[Serializable].File.OpenRead), יוצרים BinaryFormatter וקוראים ל-Deserialize. היא מחזירה object, ולכן עושים casting ל-Person. אפשר לבדוק בדיבאגר שהמידע נטען.System.Runtime.Serialization.Formatters.Soap ומשתמשים ב-SoapFormatter במקום ב-BinaryFormatter. הקובץ נשמר כ-XML (למשל Person.xml) וניתן לקריאה בדפדפן או ב-Notepad, עם תגיות כמו FirstName ו-LastName. SOAP הוא קיצור של Simple Object Access Protocol.[NonSerialized]. בקובץ לא מופיעה תגית age, ואחרי טעינה הגיל הוא 0.[OptionalField] מעל השדה החדש, וכך הוא נטען אם קיים והתעלמות אם לא.List), ו-SOAP לא.[NonSerialized].הטקסט המלא של הדקות הראשונות בהרצאה «Serialization - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים לנושא מאוד שימושי שנקרא סריאליזיישן. אז מה זה סריאליזיישן? סריאליזיישן זאת הפעולה של לקיחת אובייקט והעברתו דרך סטרים לצד השני של הסטרים.
אחרי שלמדנו את נושא הקבצים ראינו שאם אנחנו רוצים לפתוח לדוגמה קובץ לצורך כתיבה או לצורך קריאה אז אנחנו משתמשים בסטרים.
אבל כשביצענו הגדרה לגבי מה זה סטרים, בהגדרה עצמה לא דיברנו על קבצים, אמרנו שסטרים זה בעצם קו תקשורת בין שתי נקודות דרכו יכול לזרום מידע.
אז אנחנו יכולים לפתוח כל מיני סוגים של סטרימים, לדוגמה ממחשב א' למחשב ב', מהמחשב למדפסת או מהזיכרון של המחשב להרדיסק וזה יהיה סטרים לקובץ.
אבל בכל מקרה שיש לנו סטרים אנחנו יכולים לקחת איזשהו אובייקט, האובייקט הזה יכול להיות מאוד מורכב כמו קולקשן מאוד מסועף שמכיל אובייקטים על אובייקטים או שהוא יכול להיות אובייקט מאוד פשוט כמו איזשהו פרסון אחד ויחיד ואנחנו יכולים בצורה אוטומטית לקחת את האובייקט הזה ולשפוך אותו לתוך הסטרים מהקצה אחד והוא יצא בקצה השני אם הסטרים מצביע על קובץ
אז האובייקט ייכנס לקובץ כמובן שאנחנו יכולים לבצע את הפעולה ההפוכה ולטעון את האובייקט הזה מהצד השני של הסטרים אלינו.
אם שוב הסטרים מצביע על קובץ אז אנחנו יכולים לטעון את המידע הזה מהקובץ ולהפוך אותו בחזרה לאובייקט ולהמשיך לעבוד איתו.
זאת אומרת בנושא של הקבצים אנחנו ראינו איך אנחנו יכולים לקחת איזשהו קולקשן לדוגמה ובעזרת כל הטכניקה של שמירת הקולקשן לקובץ בנינו את כל הקוד הזה בעצמנו, בנינו לדוגמה שייפ שמסוגלת לקבל סטרימרייטר ולשמור לקובץ וסטרימרייטר ולקרוא מהקובץ או בצורה בינארית ואנחנו עשינו את כל המנגנון הזה לבד וכך שמרנו את הקולקשן בעצמנו לתוך קובץ
אבל אנחנו יכולים להשתמש עם המנגנון הסרליזיישן והוא יכול לעשות לנו את זה אוטומטית אז זה לא דבר רע שאנחנו יודעים איך לעשות את זה לבד אבל אם ברצוננו לקחת אובייקט ובצורה אוטומטית לשפוך את כל האובייקט הזה לקובץ בלי שאנחנו נתערב פחות או יותר בפורמט של הקובץ שהולך להיות ולטעון אותו מחדש,
אנחנו יכולים להשתמש עם המנגנון המאוד מעניין הזה שנקרא סריאליזיישן. אז בואו נראה איך זה מתבצע. מה שנעשה זה ניקח דוגמה של איזושהי מחלקה פשוטה, ניקח את המחלקה פרסון שאנחנו בטח מכירים כבר, נבנה, יש לנו כאן data members,
ניקח first name, last name וניקח, נניח שיש לנו גם h. נבנה איזשהו קונסטרקטור ריק, נבנה איזשהו קונסטרקטור שמקבל את שלושת הדאטה ממברס האלה ונהתחל אותם.
בואו נבנה כאן פונקציית toString שמחזירה את השם המלא first name ו-last name ואת ה-h. אוקיי, אז יש לנו את המחלקה person ואנחנו יכולים עכשיו ליצור אובייקט ממנה.
אז בואו ניצור אובייקט מהמחלקה, ובעזרת הקונסטרקטור נכניס לתוכו ערכים. כעת אנחנו רוצים לקחת את האובייקט הזה ובצורה אוטומטית לשפוך אותו לקובץ.
אנחנו רוצים להשתמש במנגנון ה-serialization. אז מה שאנחנו צריכים לעשות זה קודם כל צריכה להיות לנו פה איזה שהוא stream. אז בואו נפתח פייל stream, טרימפ רייט, ובגלל שאנחנו רוצים ליצור נשתמש בפונקציית קריאייט, נקרא לפרסון נקודה עכשיו השאלה היא איזה פורמט
אנחנו רוצים לבצע אז למעשה בדוטנט קיימים שני רכיבים שמסוגלים לבצע סריאליזיישן out of the box ואנחנו הולכים לראות את השימוש בשניהם אז הפורמטר הראשון או ליתר דיוק הרכיב הראשון שמבצע את המנגנון הזה של הסריאליזיישן ולוקח אובייקט ושולח אותו דרך סטרים עושה את זה בפורמט בינארי
ולכן נקרא למשתנה הזה או לקובץ person.bin. יש לנו עכשיו סטרים שמצביע לנו על איזשהו קובץ שנקרא person.bin, שאמור להיפתח ב-current directory.
בכדי שבוודאות אנחנו נצליח לפתוח את זה בתיקייה של קובץ האפליקציה, אולי כדאי שנצרף את ה-reference system windows forms ונשתמש באפליקיישן.
נקודה סטארט-אפ פאף ונשרשר את הפרסון. אחרי שיש לנו סטרים אנחנו רוצים לבצע את הפעולה של שמירת הסטרים בתוך הקובץ. אז אנחנו יכולים לפתוח פה את האובייקט בינארי פורמטר.
בואו נבין מה בעצם האובייקט הזה. זהו אובייקט הפורמטר שהוא זה שמבצע את הפעולה שדיברנו עליה. הפורמטר הזה מסוגל לקחת סטרים ואובייקט ולהעביר את האובייקט לדרך הסטרים לצד השני.
ושוב, כמו שאמרנו, אם הסטרים הזה מצביע על קובץ, אז האובייקט יישפך לתוך הקובץ. הפעולה הזאת של שפיכת האובייקט לתוך הסטרים נקראת "formatter.serialize".
ואז פונקציית serialize אומרת לי, כן, בבקשה, הנה תביא לי סטרים, יש לנו stream to write, ותביא לי את האובייקט שאתה רוצה, קראנו לו p, וזאת כל הפעולה.
אנחנו צריכים כמובן לבצע dispose או closing לסטרים שלנו. עכשיו אם אנחנו הולכים להריץ את זה אנחנו הולכים לקבל exception שימו לב איפה על פונקציית ה-serialize וה-exception מציינת שאנחנו לא יכולים לבצע את פעולת ה-serialization על person מפני ש-Person is not marked as serializable.
מה זה אומר? בכדי לאשר את הפעילות הזאת שאנחנו רוצים לבצע, אנחנו צריכים לתת הרשאה כזאת ל-Person על ידי Attribute Serializable.