تسلسل الفصول التي تحتوي على الأجيال مع التوافق الخلفي

StackOverflow https://stackoverflow.com/questions/755723

سؤال

أحاول معرفة أفضل طريقة للتعامل مع التسلسل في برنامجي.

أرغب في تسلسل الحقول الخاصة (إذن تسلسل XML لا يوجد خيار) أريد تسلسل أنواع عامة مثل BindingList (Soapserialializer ليس خيارا) أريد أيضا تقديم مستوى من الدعم ليتمكن من تحقيق كائن من الإصدارات السابقة من برنامجي.

لذلك كل ما أعتقد أنني متبق مع هو BinarySerializer، وتنفيذ واجهة Iserializable للتعامل مع التوافق إلى الأمام.

هل هذا صحيح؟

ملاحظة: يجب أن أقول أنني وجدت هذا المشروع. ومع ذلك، بدا المشروع ميتا ولم أستطع الحصول عليه (خطأ مفقود ملف)http://sourceforge.net/project/showfiles.php؟group_id=196509.

هل كانت مفيدة؟

المحلول

مع BinaryFormatter, ، يمكنك استخدام [OptionalField], ، ولكن هذا لا يزال هش جدا.

ماذا عن protobuf-net.ب يفعل كل ذلك، وليس لديه مشكلات الإصدار المرتبطة BinaryFormatter. نظرا لأنها تعتمد على تنسيق "بروتوكول البروتوكول" في Google، فهو صمم لتكون نسخة متسامحا وقابلة للتوسيع (الإفصاح: أنا المؤلف، لذلك قد أكون متحيزا).

بدلا من ذلك، DataContractSerializer يدعم التسلسل الميداني؛ فقط ضبط [DataMember] مقابل الحقول الخاصة بك بدلا من الخصائص (يتطلب .NET 3.0).

نصائح أخرى

نعم، كنت بحاجة إلى تنفيذ Iserializable.

النقاط الرئيسية هي التالية

  • تنفيذ GetObjectData (معلومات SerializationInfo، سياق StreamingContext). تحتاج هنا إلى إضافة أزواج رئيسية إلى كائن المعلومات.
  • تطبيق منشئ التسلسل MyClass (معلومات SerializationInfo، سياق StreamingContext). هنا تحتاج إلى الحصول على القيم من كائن المعلومات.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top