2011-10-03 10 views
5

मेरी तलाश अपनी इच्छा को Protobuf शुद्ध मोड़ के साथ पर हो रहा है ..सीमित Protobuf शुद्ध विरासत "पेड़"

मैं कैसे के लिए गतिशील रूप से उप-वर्गों को जोड़ने के लिए पर एसओ के आसपास कुछ सवाल देखा है serializer उप-वर्ग एन्कोड करने के लिए सक्षम होने के लिए .., जैसे this या this

मेरे स्थिति है थोड़ी अलग है, मैं एक आधार वर्ग कि हो सकता है मिल देर घिरा कोड में उप-वर्गीकृत है, और मुझे क्रमानुसार करने चाहते हैं आधार वर्ग के रूप में है, और उप-वर्ग के क्षेत्रों/गुणों को पूरी तरह से अनदेखा करता है।

कारण मुझे इसकी आवश्यकता है, बाद में, जब मैं डेटा को deserialize, उप-वर्ग का कोड भी उपलब्ध नहीं होगा, तो उप-वर्ग का निर्माण भी संभव नहीं होगा।

वहाँ सीमित करने के लिए/निषेध उप-वर्ग serializtion कोई तरीका है?

मेरे मामले में मैं एक सूची जहां सूची में कुछ आइटम DerivedClass हैं।

मैं Protobuf शुद्ध BaseClass के रूप में सब कुछ को क्रमानुसार और साथ ही BaseClass को deserialize करने के लिए बनाने के लिए एक रास्ता खोजने के लिए करना चाहते ...

मैं कोड में झाँक रहा की कोशिश की है, लेकिन बहुत उपयोगी कुछ नहीं मिला है । और उन्हें आधार वर्ग से अलग ढंग से इलाज -

उत्तर

2

आम तौर पर, पुस्तकालय व्युत्पन्न वर्ग खोलना के बारे में बहुत खास है। केवल वर्तमान अपवाद प्रॉक्सी कक्षाएं हैं, विशेष रूप से इकाई फ्रेमवर्क और एनएचबेर्नेट में। tidy समाधान के लिए, यह किसी प्रकार का "अनदेखा सबक्लास" स्विच जोड़ने के लिए व्यावहारिक प्रतीत होता है। लेकिन, जबकि जो मौजूद नहीं है, एक बहुत आलसी (और hacky) दृष्टिकोण का उपयोग कर धोखा देने के लिए किया जाएगा मौजूदा NHibernate के लिए हैंडलिंग, उदाहरण के लिए:

namespace NHibernate.Proxy { 
    interface INHibernateProxy {} 
} 
... 
public class SomeDerivedType : BaseType, INHibernateProxy {} 

इस फिर स्वचालित रूप से प्रति BaseType के रूप में धारावाहिक रूप दिया जाएगा। हालांकि, इसके बारे में धोखा देने का एक बेहोश झटका है।

+0

हल्की एहसास तुम कहते हो? ;) मुझे लगता है कि अगर आप इस के लिए कुछ कस्टम तंत्र जोड़ना चाहते थे मैं स्रोत कोए लेकिन सुझाव – damageboy

+1

@damageboy के लिए धन्यवाद को हैक कर देंगे, 'TypeModel.ResolveProxies' को देख के लायक हो जाएगा। मैं यहां एक प्रोटोबफ-नेट विशिष्ट एपीआई जोड़ने के खिलाफ नहीं हूं। –

+0

बस हमें यह जानकारी यहां स्पष्ट कर रहे हैं ... कारण तुम मुझे ResolveProxies ओर इशारा कर रहे हैं, क्योंकि यह अपवाद फेंकने से पहले अंतिम उपाय के रूप ThrowUnexpectedSubtype से कहा जाता है? – damageboy

संबंधित मुद्दे