ABA


"סרנלזציה ודיסרנלזציה לDictionary"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15946 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15946
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   21:04   15.06.10   
אל הפורום  
  סרנלזציה ודיסרנלזציה לDictionary  
 
   היי, ניסתי לעשות סרנלזציה לאוסף גנרי Dictionary.
משום מה שאני מנסה לעשות דיסרנלזציה זה זורק לי אקספשן כזה:

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

---------------------------
System.Runtime.Serialization.SerializationException: End of Stream encountered before parsing was completed.

at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()

at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)

at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)

at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)

at SVR.myDictionary.Load(String path) in c:\users\aviad\documents\visual studio 2010\Projects\SVR\SVR\myDictionary.cs:line 52
---------------------------
OK
---------------------------

וככה ניסתי לעשות את זה:


public delegate void FirstTimeLoadingHandler();
public event FirstTimeLoadingHandler OnFirstTimeLoadingEvent;

Dictionary<string,Process> dictionary;
BinaryFormatter bf;

public myDictionary()
{
this.dictionary = new Dictionary<string, Process>();
bf = new BinaryFormatter();
}
public void Save(string path)
{
using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
bf.Serialize(fs, dictionary);
}
}
/// <summary>
/// Load, loads the dictionary collection from a certain path as a binary file.
/// if there is nothing to load you are advice to load manually by using
/// the "OnFirstTimeLoadingEvent" , after the event is executed this method saves the dictionary.
/// </summary>
/// <param name="path"></param>
public void Load(string path)
{
FileStream fs = null;
try
{
fs = File.OpenRead(path);
dictionary = (Dictionary<string, Process>)bf.Deserialize(fs);

}
catch (FileNotFoundException)
{
//means that this is the first time in the software, so we save
if (OnFirstTimeLoadingEvent != null)
OnFirstTimeLoadingEvent();
if (dictionary.Count > 0)
Save(path);

}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
finally
{
if (fs != null)
fs.Dispose();
}
}

אשמח לקבל עזרה בהקדם...


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אוף אני חושב שזה ביגלל שאני מנסה לעשות סרנלזציה לפרוסס ronen333  15.06.10 21:31 1
     זה מה שבאתי לשאול... זה בכלל ממש את זה ממשק הסירליזציה? Nesher  15.06.10 21:58 2
         לא נראה לי שלקומפוננטס יש את זה ronen333  15.06.10 23:42 3
         אכן זו היתה הבעיה ronen333  16.06.10 07:55 4
             חלאס להגיד סרנלזציה חח, akoka2 16.06.10 08:04 5
                 חחח נו בסדר בוא תאכל אותי וזהו ronen333  16.06.10 08:12 6
  מכתב Deuce  16.06.10 12:41 7
     לא צריך.. DICTIONARY כבר יורש מISerializable ronen333  16.06.10 13:22 8
         בגדול זה אפשרי. Deuce  17.06.10 12:28 9
             אווקי, תודה :) ronen333  17.06.10 14:21 10
                 ברשותך אעיר הערה, Deuce  18.06.10 03:24 11

       
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   21:31   15.06.10   
אל הפורום  
  1. אוף אני חושב שזה ביגלל שאני מנסה לעשות סרנלזציה לפרוסס  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   21:58   15.06.10   
אל הפורום  
  2. זה מה שבאתי לשאול... זה בכלל ממש את זה ממשק הסירליזציה?  
בתגובה להודעה מספר 1
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   23:42   15.06.10   
אל הפורום  
  3. לא נראה לי שלקומפוננטס יש את זה  
בתגובה להודעה מספר 2
 
   אוף איזה ערבי, עכשיו אני צריך להעתיק לDICTIONARY מסוג סטרינג סטרינג את הURI.. ולזה לעשות סרנלזציה.
בע..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   07:55   16.06.10   
אל הפורום  
  4. אכן זו היתה הבעיה  
בתגובה להודעה מספר 2
 
   והגיוני שהם לא ירשו לעשות לזה סרנלזציה האמת.. פתרתי אותה אבל קצת מבאס כי זה גרם לי להעתיק את הכל למבנה דומה רק כדי לשמור על קובץ.

תודה לך על העזרה בכ"מ .


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

   08:04   16.06.10   
אל הפורום  
  5. חלאס להגיד סרנלזציה חח,  
בתגובה להודעה מספר 4
 
   לא ככה אומרים, Serialization=סריאליזציה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   08:12   16.06.10   
אל הפורום  
  6. חחח נו בסדר בוא תאכל אותי וזהו  
בתגובה להודעה מספר 5
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   12:41   16.06.10   
אל הפורום  
  7. מכתב  
בתגובה להודעה מספר 0
 
קודם כל, מבחינת OOP זאת לא הדרך הנכונה. צריך לעשות את המחלקה Serializable ולאפשר מאובייקט המילון לגשת לפקודה save.

לא כזה הבנתי מה הקשר פרוסס בכל הדיון, לפי מה שאני מבין אתה מנסה לשמור אובייקט וזה אכן אפשרי (אני הנחתי פה שאתה לא רוצה לשמור פרוסס, אם כן אז הסבר לי).

במקרה שלך, זה אפילו דיי פשוט. כל מה שאתה צריך זה לרוץ באיטרטור על המילון ולהוסיף זוג איבר איבר לקובץ.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   13:22   16.06.10   
אל הפורום  
  8. לא צריך.. DICTIONARY כבר יורש מISerializable  
בתגובה להודעה מספר 7
 
   ולא רציתי לשמור את כל המחלקה אלא רק את המילון עצמו..
ככה שמבחינת OOP זה בסדר גמור.
והקשר הוא שאי אפשר לעשות סרילזציה לפרוסס כי הם לא איפשרו את זה במחלקה, ובצדק כי הוא מכיל פוינטרים לתהליכים.. וזה דברים שמתשנים בין מחשב למחשב, ובין זמן לזמן וכו' וכו'...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   12:28   17.06.10   
אל הפורום  
  9. בגדול זה אפשרי.  
בתגובה להודעה מספר 8
 
פעם עשיתי סיריאליזציה למבנה נתונים יחסית מטורף, נעזרתי במאמר הבא:
http://www.parashift.com/c++-faq-lite/serialization.html

אני חושב שהוא מעניין באופן כללי, בכל אופן הוא ל-C++.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   14:21   17.06.10   
אל הפורום  
  10. אווקי, תודה :)  
בתגובה להודעה מספר 9
 
   בכ"מ עשיתי inner class שמכילה רק את המאפיינים שאני צריך והיאSerializable , ככה זה גם חוסך מקום.. והאמת באופן משמעותי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   03:24   18.06.10   
אל הפורום  
  11. ברשותך אעיר הערה,  
בתגובה להודעה מספר 10
 
אני חושב שלמדת ושווה גם לאחרים להסיק את המסקנות - עדיף לשמור בזכרון אך ורק את המידע ההכרחי למבנה הנתונים. אם למשל יש struct עם המון שדות שניתן לבנות אותו בעזרת פקודה קצרה ואתחול מצביע מסויים, אז חבל לשמור את כל המידע - פשוט דוחסים את כל המידע במצביע לתוך char * ושומרים בזכרון. זה הרבה יותר נכון והרבה יותר טוב.

הבעייה מתחילה למשל כאשר מייצגים למשל גרף, שיכולים להיות בו cycles ורוצים לשמור אותו בזכרון - זה קצת מסובך, אבל אם אין ברירה - מתאמצים.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net