سؤال

لدي فئة أساسية في مجموعة واحدة وعدد كبير من الفئات التي تم إنشاؤها في أخرى ترث من الفئة الأساسية. باستخدام Protobuf-Net (R282) لتسلسل قائمة من النوع الأساسي يفشل عند محاولة حل النموذج الفرعي (السطر 248 من serializert.cs) لأن الفئة الفرعية ليست في تجميع الفئة الأساسية. إن نقل الفصول معًا ليس خيارًا مفضلاً ومن المهم إلى حد ما أن أتمكن من نقل القائمة.

هنا فئة القاعدة الموسومة. يتم تمييز الأنواع المشمولة مع ProtoMember(x) كما هو مطلوب.

[ProtoContract] 
[ProtoInclude(1,"SomeItemType")]
[ProtoInclude(2,"AnotherItemType")]
[ProtoInclude(190,"YetAnotherItemType")]
public abstract class BaseItem
{
}

كملاحظة جانبية ، يعد هذا جزءًا من التقييم باستخدام Protobuf-Net لاستبدال ثنائي الأداء لنقل البيانات بين تطبيق سطح المكتب وخدمة الويب الصابون.

هل يمكنني القيام بهذا النوع من الأشياء على الإطلاق؟ هل هناك طريقة أفضل؟ هل أفتقد شيئًا واضحًا؟ سؤال طويل الأجل منفصل هو هل يجب أن أفعل أي شيء مختلف قليلاً للتحضير للتحرك النهائي إلى 3.5؟

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

المحلول

ربما أسهل طريقة للاستخدام ProtoInclude يكون مع typeof, ، لأن هذا سيتعامل مع الكثير من الفروق الدقيقة بالنسبة لك تلقائيًا:

[ProtoInclude(1, typeof(SomeItemType))]

بدلاً من ذلك ، يمكنك فقط استخدام أسماء مؤهلة للتجميع ، هكذا:

[ProtoInclude(1,"SomeItemType, SomeRandomAssembly")]

في حالة غريبة إلى حد ما تتضمن متعددة AppDomainS ، لقد وجدت أنه يمكنك أيضًا العمل بعض السحر مع AppDomain.TypeResolve الحدث ، ولكن يجب تجنب ذلك إن أمكن. لديّ أيضًا إعادة عمل كاملة لطبقة البيانات الوصفية في خط الأنابيب ، مما يتيح المزيد من المرونة في وقت التشغيل (بدلاً من الاضطرار إلى الإعلان عن الترجمة ، مما يسبب بعض الألم أعلاه).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top