PDA

View Full Version : چه طور میشه یه کلاس رو سریالازبل (serializable)کرد ؟



pd_ze62
شنبه 25 اسفند 1386, 12:14 عصر
من یه کلاس دارم (ُserializableData) برای "سریالایز کردن باینری آبجکت در فایل"،که با تابع Save اون میشه اون ابجکت رو save کرد.
یه کلاس Node هم دارمکه دو تا عضو داره : یه string ویه int و یه تابع سازنده.
(کلاس Node کلاس SerializableData رو به ارث می بره.)
اما زمانی که کد زیر رو مینویسم:
Node n1 = new Node("hi", 234);
n1.Save("fileName");
خطا میده که: تایپ Node سریالایزبل نیست.
مشکل کجاست؟

sinpin
شنبه 25 اسفند 1386, 13:01 عصر
من یه کلاس دارم (ُserializableData) برای "سریالایز کردن باینری آبجکت در فایل"،که با تابع Save اون میشه اون ابجکت رو save کرد.
یه کلاس Node هم دارمکه دو تا عضو داره : یه string ویه int و یه تابع سازنده.
(کلاس Node کلاس SerializableData رو به ارث می بره.)
اما زمانی که کد زیر رو مینویسم:
Node n1 = new Node("hi", 234);
n1.Save("fileName");
خطا میده که: تایپ Node سریالایزبل نیست.
مشکل کجاست؟
نیازی نیست که کلاس Node از کلاس SerializableData ارث ببره،
کافیه در بالای تعریف کلاس خاصیت Serializable را اضافه کنید :

[Serializable]
public class Node
{
//...
}

pd_ze62
شنبه 25 اسفند 1386, 13:24 عصر
ممنونم خیلی زیاد.
جناب sinpin، یه سوال دیگه که نسبتا مرتبطه دارم:
من یه آرایه از این Node ها (با همون تعریفی که گفتم)دارم و باید این آرایه رو save و load کنم.به نظر شما اون رو به روشی که گفتم save کنم یا نودها رو به صورت کارکتری در فایل writeline کنم؟ کدوم efficient تره؟ هم از لحاظ زمان و هم حافظه.

sinpin
شنبه 25 اسفند 1386, 13:40 عصر
من یه آرایه از این Node ها (با همون تعریفی که گفتم)دارم و باید این آرایه رو save و load کنم.به نظر شما اون رو به روشی که گفتم save کنم یا نودها رو به صورت کارکتری در فایل writeline کنم؟ کدوم efficient تره؟ هم از لحاظ زمان و هم حافظه.
فکر میکنم بهتره باینری سریالایز کنید.
هرچند به مسایل زیادی مثل تعداد آبجکتها و ... هم بستگی داره. خودتون هم میتونید کارایی هر کدوم رو تست کنید مثلا با یک تایمر درونی و یا ...
این لینک رو ببینید :
http://www.codeproject.com/KB/cs/FastSerialization.aspx
همچنین :
http://www.theserverside.net/discussions/thread.tss?thread_id=34635
و ...