2009-09-01 18 views
7

ऑब्जेक्ट सीरियलाइजेशन और Deserialization क्या हैं? सीरियलाइजेशन में सामान्य तकनीकों के साथ क्या अंतर होता है जैसे किसी ऑब्जेक्ट की गुणों को पढ़ना और फिर उनके साथ डेटारो के कॉलम भरना और आखिर में डीबी में डेटारो को सहेजना?ऑब्जेक्ट सीरियलाइजेशन और Deserialization?

धन्यवाद

+0

धन्यवाद बहुत, मैं अन्य प्रश्न यहाँ एक टिप्पणी के रूप में डाल दिया: अपने उत्तरों को पढ़ना, इसलिए जब डीबी का उपयोग करने वाले एप्लिकेशन में क्रमबद्धरण का उपयोग करके यह सहायक होना चाहिए? – odiseh

उत्तर

1

क्रमबद्धता, आम तौर पर, (लेकिन यह कहीं भी हो सकता है) डिस्क के लिए अपने क्रम में एक वस्तु का राज्य लेखन, और इसे वापस फिर से पढ़ने के लिए सक्षम होने की प्रक्रिया।

प्रभावी रूप से, किसी ऑब्जेक्ट के गुणों को तालिका में संग्रहीत करना क्रमबद्धता का एक रूप है।

  • XmlSerialization
  • BinarySerialization

आप अपनी खुद की कर सकते हैं:

नेट में, अन्य रूपों देखते हैं।

लेकिन सामान्य रूप से, यदि आप कहीं भी अपनी वस्तु की स्थिति को सहेज रहे हैं, और फिर इसे अपने रनटाइम में 'लाइव' ऑब्जेक्ट में फिर से पढ़ रहे हैं, तो आप इसे क्रमबद्ध कर रहे हैं।

+2

सीरियलाइजेशन का अर्थ डिस्क पर लिखना जरूरी नहीं है। इसका मतलब है कि इसे कुछ बाइनरी प्रारूप में डालना है जिसे निर्यात किया जा सकता है। एक धारावाहिक वस्तु डिस्क पर लिखे गए बजाय नेटवर्क पर भेजी जा सकती है, उदाहरण के लिए। – Chuck

+0

हां, यही कारण है कि मैंने नीचे 'कहीं' लिखा था। मैंने पहली वाक्य में बस 'आम तौर पर' याद किया। आप बिल्कुल सही हैं। –

14

सीरियलाइजेशन आम तौर पर डेटा के एक संस्करण (ऑब्जेक्ट्स के बजाए) का उपयोग करने के लिए संदर्भित करता है जिसका उपयोग किसी नेटवर्क पर स्थानांतरण के लिए किया जा सकता है, या शायद प्रक्रियाओं/AppDomain एस/एक मशीन पर आदि।

सीरियलाइजेशन आम तौर पर डेटा को स्ट्रिंग (सोच: एक्सएमएल/जेसन) या कच्चे बाइनरी (byte[] आदि) के रूप में लिखना है। Deserialization रिवर्स प्रक्रिया है; कच्चा डेटा (फ़ाइल से, आने वाली नेटवर्क सॉकेट आदि से) लेना और ऑब्जेक्ट मॉडल का पुनर्निर्माण करना।

डीबी का उपयोग करने के बीच अंतर यह है कि इसमें कोई आंतरिक टैब्यूलर लेआउट नहीं है, और डेटाबेस के लिए कोई वास्तविक टाई नहीं है; डेटा किसी भी आकार का हो सकता है, और तालिकाओं की पंक्तियों/कॉलम प्रकृति की तुलना में ऑब्जेक्ट-ओरिएंटेड लेआउट पर अधिक बारीकी से नक्शा रखता है।

अधिकांश प्लेटफार्मों में क्रमिकरण उपकरण की एक श्रृंखला होती है। उदाहरण के लिए, ऐसा लगता है कि आप .NET के बारे में बात कर रहे हैं - इसलिए BinaryFormatter (.NET-specific), XmlSerializer, DataContractSerializer, Json.NET और प्रोटोबफ-नेट/डॉटनेट-प्रोटोबफ सभी योग्य होंगे।

5

सीरियलाइजेशन = ऑब्जेक्ट की प्रासंगिक स्थिति को एक स्ट्रीम करने योग्य प्रतिनिधित्व में डाल देना। इसका मतलब यह है कि इसे बाइट स्ट्रीम में परिवर्तित कर दिया जाए। इसमें जरूरी नहीं है कि प्रत्येक सदस्य चर को स्ट्रीम में कॉपी करें। प्रभावशाली जावा में जोशुआ ब्लोच द्वारा उपयोग किया जाने वाला क्लासिक उदाहरण हैशसेट है। आप केवल हैशसेट में तत्वों को क्रमबद्ध करेंगे लेकिन कुंजी नहीं।

Deserialization = किसी ऑब्जेक्ट को एक धारावाहिक प्रतिनिधित्व से बहाल करना और ऑब्जेक्ट के आविष्कारों को सुनिश्चित करना। Deserialization वस्तु के लिए एक अलग कन्स्ट्रक्टर के बारे में सोचा जा सकता है। ऊपर वर्णित हैशसेट के मामले में आप एक नया हैशसेट बनाएंगे और फिर स्ट्रीम से मूल्यों को इस नई डेटा संरचना में डालेंगे।

+0

etymological संकेतों के लिए upvoted। सीरियलाइजेशन एक ऑब्जेक्ट * पेड़ * (पदानुक्रमित) को सीरियल (फ्लैट) प्रतिनिधित्व में लाता है, बिना अर्थशास्त्र खोने के। –

+0

इसके साथ कुछ भी नहीं मिला है कि आप इसे 'पेड़' से 'फ्लैट' प्रतिनिधित्व में जोड़ते हैं या नहीं। आप एक डेटाबेस में क्रमबद्ध कर सकते हैं जो अभी भी एक पेड़ प्रारूप में है, और उसमें से deserialise। यह प्रासंगिक नहीं है। –

+0

मुझे नहीं लगता कि सामान्य रूप से एक डीबी संस्करण किसी ऑब्जेक्ट का एक धारावाहिक संस्करण होता है। किसी ऑब्जेक्ट में निहित डेटा को कई तालिकाओं पर विभाजित किया जा सकता है। क्रमबद्धता का विचार एक प्रतिनिधित्व बना रहा है जिसे थोड़ा सा स्थानांतरित किया जा सकता है (यानी क्रमशः)। – jens

3

सीरियलाइजेशन का मतलब है कि आप अपनी वस्तु को एक प्रतिनिधित्व में जारी रखते हैं, जिसे आप कहीं भी स्टोर कर सकते हैं। ऐसा करने का एक तरीका सिर्फ पॉइंटर लेना है जहां आपकी ऑब्जेक्ट मेमोरी में संग्रहीत होती है और प्रत्येक बाइट को फ़ाइल के रूप में लिखती है।चूंकि यह प्रतिनिधित्व आपकी प्रोग्रामिंग भाषा के लिए बहुत विशिष्ट है (और यह स्मृति में वस्तुओं का प्रतिनिधित्व कैसे करता है), एक सुधार आपके ऑब्जेक्ट को स्ट्रिंग प्रस्तुति में परिवर्तित करना होगा जिसमें एक निश्चित प्रसिद्ध संरचना (जैसे एक्सएमएल या जेएसओएन) है, ताकि आप कर सकते हैं

क) यह आसान

ख) स्टोर हस्तांतरण और बहाल यह आसान

ग) के बाद से हर कोई जानता है कि कैसे प्रारूप परिभाषित किया गया है, किसी भी अन्य प्रोग्राम आपके वस्तु भी

तो पढ़ सकते हैं आपको किसी डेटाबेस में ऑब्जेक्ट डालने का भी क्रमिकरण का एक और रूप है।

Deserialization का मतलब है कि आप उस ऑब्जेक्ट को फिर से लोड/पुनर्स्थापित कर सकते हैं जहां से आपने इसे सहेजा था।

0

क्रमबद्धता

क्रमबद्धता एक वस्तु या एक धारा में वस्तुओं ग्राफ का एक सेट परिवर्तित करने की प्रक्रिया है।

Deserialization

Deserialization एक वस्तु या वस्तु ग्राफ के एक सेट में धारा वापस परिवर्तित करने की प्रक्रिया है।

यहाँ है कुछ कस्टम विशेषताओं:

[OnDeserialization] -> यह प्रयोग किया जाता है जब हम धारा के अक्रमांकन के दौरान कुछ कार्रवाई करने के लिए की जरूरत है। [ऑनडिसेरियलाइज्ड] -> यह तब उपयोग होता है जब हमें ऑब्जेक्ट में स्ट्रीम को deserialized के बाद कुछ क्रिया करने की आवश्यकता होती है। इस तरह के रूप में वस्तु के क्षेत्र मान सेट ठीक से

नीचे उदाहरण है

[Serializable] 
    internal class DemoForSerializableAndDeserializable 
    { 
     internal string Fname = string.Empty; 
     internal string Lname = string.Empty; 

     internal Stream SerializeToMS(DemoForSerializableAndDeserializable objDemo) 
     { 
      DemoForSerializableAndDeserializable objSer = new DemoForSerializableAndDeserializable(); 
      MemoryStream ms = new MemoryStream(); 
      BinaryFormatter bf = new BinaryFormatter(); 
      bf.Serialize(ms, objSer); 
      return ms; 
     } 

     [OnDeserializing] 
     private void OnDeserializing(StreamingContext context) 
     { 
      // Do some work while deserializing the stream 
     } 
     [OnDeserialized] 
     private void OnSerialized(StreamingContext context) 
     { 
      Fname = "abc"; 
     } 

    } 

कॉलिंग कोड

अपने सभी उत्तरों के लिए
class CallingCode 
    { 
     string fname = string.Empty; 
     string Lname = string.Empty; 

     static void Main(string[] args) 
     { 
      DemoForSerializableAndDeserializable demo = new DemoForSerializableAndDeserializable(); 

      Stream ms = demo.SerializeToMS(demo); 
      ms.Position = 0; 

      DemoForSerializableAndDeserializable demo1 = new BinaryFormatter().Deserialize(ms) as DemoForSerializableAndDeserializable; 

      Console.WriteLine(demo1.Fname); 
      Console.WriteLine(demo1.Lname); 
      Console.ReadLine(); 
     } 

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