تسلسل الفصول التي تحتوي على الأجيال مع التوافق الخلفي
-
09-09-2019 - |
سؤال
أحاول معرفة أفضل طريقة للتعامل مع التسلسل في برنامجي.
أرغب في تسلسل الحقول الخاصة (إذن تسلسل 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). هنا تحتاج إلى الحصول على القيم من كائن المعلومات.