विजुअल बेसिक में सभी सीरियल के बारे में

सीरियलाइज़ेशन एक वस्तु को रैखिक अनुक्रम में परिवर्तित करने की प्रक्रिया है बाइट्स जिसे "बाइट स्ट्रीम" कहा जाता है। Deserialization बस प्रक्रिया को उलट देता है। लेकिन आप किसी वस्तु को बाइट स्ट्रीम में क्यों बदलना चाहेंगे?

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

आप इन ऑब्जेक्ट्स को फ़ाइलों में डिस्क पर स्टोर भी कर सकते हैं, उन्हें वेब पर भेज सकते हैं, उन्हें एक अलग प्रोग्राम में पास कर सकते हैं, सुरक्षा या सुरक्षा के लिए बैकअप कॉपी रख सकते हैं। संभावनाएं वस्तुतः अंतहीन हैं।

यही कारण है कि। में और इस तरह की एक प्रमुख प्रक्रिया है मूल दृश्य. नीचे लागू करने से कस्टम क्रमांकन पर एक अनुभाग है ISerializable इंटरफ़ेस और कोडिंग ए नया और एक GetObjectDataसबरूटीन।

instagram viewer

क्रमांकन के पहले उदाहरण के रूप में, चलो सबसे आसान कार्यक्रमों में से एक करते हैं, लेकिन सबसे उपयोगी में से एक: क्रमबद्ध डेटा, और फिर सरल श्रेणी में डेटा को फ़ाइल से और उसके लिए deserializing करना। इस उदाहरण में, डेटा न केवल क्रमबद्ध है, बल्कि डेटा की संरचना को भी सहेजा गया है। यहाँ संरचना को चीजों को रखने के लिए एक मॉड्यूल में घोषित किया गया है... कुंआ... संरचित।

मॉड्यूल SerializeParms
पब्लिक क्लास ParmExample
स्ट्रिंग के रूप में सार्वजनिक Parm1 नाम = "Parm1 नाम"
सार्वजनिक Parm1Value पूर्णांक = 12345 के रूप में
स्ट्रिंग के रूप में सार्वजनिक Parm2Name
सार्वजनिक Parm2Value दशमलव के रूप में
एंड क्लास
अंत मॉड्यूल

फिर, व्यक्तिगत मानों को इस तरह फ़ाइल में सहेजा जा सकता है:

आयात प्रणाली। रनटाइम। क्रमबद्धता। Formatters। बाइनरी
आयात प्रणाली। आईओ
पब्लिक क्लास फॉर्म 1
निजी उप mySerialize_Click (_
सिस्टम के रूप में ByVal प्रेषक। वस्तु, _
ByVal e As System। EventArgs) _
MySerialize को हैंडल करता है। क्लिक करें
नई ParmExample के रूप में डिम पर्माडाटा
ParmData। Parm2Name = "Parm2 नाम"
ParmData। परम 2 वेल = 54321.12345
डिम एस न्यू फाइलस्ट्रीम ("पार्मइन्फो", फाइलमोड के रूप में। सृजन करना)
नई बाइनरीफ़ॉर्मर के रूप में डिम एफ
च। सीरियलाइज़ करें
रों। बंद करे()
अंत उप
एंड क्लास

और उन्हीं मूल्यों को इस तरह से प्राप्त किया जा सकता है:

आयात प्रणाली। रनटाइम। क्रमबद्धता। Formatters। बाइनरी
आयात प्रणाली। आईओ
पब्लिक क्लास फॉर्म 1
निजी उप myDeserialize_Click (_
सिस्टम के रूप में ByVal प्रेषक। वस्तु, _
ByVal e As System। EventArgs) _
MyDeserialize को हैंडल करता है। क्लिक करें
डिम एस = न्यू फाइलस्ट्रीम ("पर्माइनफो", फाइलमोड। खुला हुआ)
नई बाइनरीफ़ॉर्मर के रूप में डिम एफ
नई ParmExample के रूप में मंद बहाल
पुनर्स्थापनाय = च। वर्णन करें
रों। बंद करे()
कंसोल। राइटलाइन (पुनर्स्थापनापार्म्स) Parm1Name)
कंसोल। राइटलाइन (पुनर्स्थापनापार्म्स) Parm1Value)
कंसोल। राइटलाइन (पुनर्स्थापनापार्म्स) Parm2Name)
कंसोल। राइटलाइन (पुनर्स्थापनापार्म्स) Parm2Value)
अंत उप
एंड क्लास

संरचना या एक संग्रह (जैसे कि एक सारणी सूची) इसके बजाय कक्षा यह भी इसी तरह एक फ़ाइल के लिए serialized किया जा सकता है।

अब जब हम मूल क्रमबद्ध प्रक्रिया पर चले गए हैं, तो हम उन विशिष्ट विवरणों को देखते हैं जो अगले पृष्ठ पर प्रक्रिया का हिस्सा हैं।

इस उदाहरण के बारे में आपको सबसे पहले जिन चीजों पर ध्यान देना चाहिए उनमें से एक है में विशेषता कक्षा. गुण बस अधिक जानकारी है कि आप एक वस्तु के बारे में VB.NET को प्रदान कर सकते हैं और वे कई अलग अलग चीजों के लिए उपयोग किया जाता है। इस कोड में विशेषता VB.NET को अतिरिक्त कोड जोड़ने के लिए कहती है ताकि बाद में, इस वर्ग में सब कुछ क्रमबद्ध हो सके।

यदि कक्षा में कुछ विशिष्ट वस्तुएं हैं जो आप नहीं क्रमबद्ध होना चाहते हैं, आप का उपयोग कर सकते हैं उन्हें बाहर करने की विशेषता:

स्ट्रिंग के रूप में सार्वजनिक Parm3Value = "जो भी"

उदाहरण में, नोटिस वह है क्रमबद्ध करें तथा deserialize के तरीके हैं BinaryFormatter वस्तु ( इस उदाहरण में)।

च। सीरियलाइज़ करें

यह वस्तु लेता है फ़ाइल धारा ऑब्जेक्ट और ऑब्जेक्ट को पैरामीटर के रूप में क्रमबद्ध किया जाना है। हम देखेंगे कि VB.NET एक और ऑब्जेक्ट प्रदान करता है जो परिणाम को XML के रूप में व्यक्त करने की अनुमति देता है।

और एक अंतिम ध्यान दें, यदि आपकी वस्तु में अन्य अधीनस्थ वस्तुएं शामिल हैं, तो उन्हें क्रमबद्ध भी किया जाएगा! लेकिन जबसे सब ऐसी वस्तुएँ जो क्रमबद्ध होती हैं जरूर के साथ चिह्नित किया जाए विशेषता, इन सभी बाल वस्तुओं को उस तरह से भी चिह्नित किया जाना चाहिए।

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

बाइनरी फ़ाइल के बजाय एक्सएमएल में सीरियल करने के लिए बहुत कम परिवर्तनों की आवश्यकता होती है। XML उतना तेज़ नहीं है और कुछ ऑब्जेक्ट जानकारी को कैप्चर नहीं कर सकता है, लेकिन यह अधिक लचीला है। XML का उपयोग आज दुनिया की किसी भी अन्य सॉफ्टवेयर तकनीक के बारे में किया जा सकता है। यदि आप सुनिश्चित करना चाहते हैं कि आपकी फ़ाइल संरचनाएँ "आपको" Microsoft में बाँध न दें, तो यह देखने के लिए एक अच्छा विकल्प है। Microsoft अपनी नवीनतम तकनीक में XML डेटा फाइल बनाने के लिए "LINQ to XML" पर जोर दे रहा है लेकिन बहुत से लोग अभी भी इस पद्धति को पसंद करते हैं।

में 'X' एक्सएमएल ई के लिए खड़ा हैएक्सtensible। हमारे एक्सएमएल उदाहरण में, हम एक्सएमएल के उन एक्सटेंशनों में से एक का उपयोग करने जा रहे हैं, जिसे एक तकनीक कहा जाता है साबुन. इसका मतलब "सिंपल ऑब्जेक्ट एक्सेस प्रोटोकॉल" था, लेकिन अब यह सिर्फ एक नाम है। (SOAP को इतना उन्नत किया गया है कि मूल नाम अब और अच्छी तरह से फिट नहीं होता है।)

मुख्य बात जो हमें अपने सबरूटीन्स में बदलना है, वह क्रमबद्धता फॉर्मेट की घोषणा है। इसे उन दोनों उप-प्रकारों में बदलना होगा जो ऑब्जेक्ट को क्रमबद्ध करता है और जो इसे फिर से डिजर्व करता है। डिफ़ॉल्ट कॉन्फ़िगरेशन के लिए, इसमें आपके प्रोग्राम में तीन परिवर्तन शामिल हैं। सबसे पहले, आपको प्रोजेक्ट के लिए एक संदर्भ जोड़ना होगा। प्रोजेक्ट को राइट-क्लिक करें और चुनें संदर्भ जोड़ें .... सुनिश्चित करो ...

प्रणाली। रनटाइम। क्रमबद्धता। Formatters। साबुन

... परियोजना में जोड़ा गया है।

फिर कार्यक्रम में दो बयानों को बदलें जो इसे संदर्भित करते हैं।

आयात प्रणाली। रनटाइम। क्रमबद्धता। Formatters। साबुन
नई साबुन के रूप में डिम एफ

इस बार, यदि आप उसी की जांच करते हैं ParmData नोटपैड में फ़ाइल, आप देखेंगे कि पूरी बात पठनीय XML पाठ जैसे ...

परमा 1 नाम
12345
परम 2 नाम
54321.12345

वहाँ भी अतिरिक्त XML का एक बहुत कुछ है जो फ़ाइल में SOAP मानक के लिए भी आवश्यक है। यदि आप सत्यापित करना चाहते हैं कि क्या है विशेषता करता है, आप उस विशेषता के साथ एक चर जोड़ सकते हैं और यह सत्यापित करने के लिए फ़ाइल को देख सकते हैं कि यह शामिल नहीं है।

उदाहरण है कि हमने केवल डेटा को क्रमबद्ध किया है, लेकिन मान लीजिए कि आपको यह नियंत्रित करने की आवश्यकता है कि डेटा कैसे क्रमबद्ध है। VB.NET वह भी कर सकता है!

इसे पूरा करने के लिए, आपको सीरियलाइजेशन की अवधारणा में थोड़ा गहरा होना चाहिए। VB.NET के पास यहाँ मदद करने के लिए एक नई वस्तु है: SerializationInfo. यद्यपि आपके पास कस्टम क्रमिक व्यवहार को कोड करने की क्षमता है, यह अतिरिक्त कोडिंग की लागत के साथ आता है।

बुनियादी अतिरिक्त कोड नीचे दिखाया गया है। याद रखें, इस वर्ग का उपयोग इसके बजाय किया जाता है ParmExample कक्षा को पहले के उदाहरण में दिखाया गया है। यह एक पूर्ण उदाहरण नहीं है। उद्देश्य आपको नया कोड दिखाना है जो कस्टम क्रमांकन के लिए आवश्यक है।

आयात प्रणाली। रनटाइम। क्रमबद्धता
_
पब्लिक क्लास कस्टमाइजेशन
इम्प्लीमेंटेबल इम्प्लीमेंटेबल
'यहाँ सिलसिलेवार किए जाने वाले डेटा
'सार्वजनिक सीरियलाइज्ड प्रकार के रूप में परिवर्तनीय
सार्वजनिक उप नया ()
'डिफ़ॉल्ट कंस्ट्रक्टर जब वर्ग
'बनाया गया है - कस्टम कोड हो सकता है
'यहां भी जोड़ा गया
अंत उप
सार्वजनिक उप नया (_
SerializationInfo के रूप में byVal जानकारी, _
स्ट्रीमिंग के रूप में ByVal संदर्भ)
'अपने प्रोग्राम वेरिएबल्स को इनिशियलाइज़ करें
'एक क्रमबद्ध डेटा स्टोर
अंत उप
सार्वजनिक उप GetObjectData (_
SerializationInfo के रूप में byVal जानकारी, _
ByVal संदर्भ के रूप में StreamingContext) _
इम्प्लीमेंटेबल इम्प्लीमेंटेबल। GetObjectData
'क्रमबद्ध डेटा स्टोर को अपडेट करें
'कार्यक्रम चर से
अंत उप
एंड क्लास

विचार यह है कि अब आप कर सकते हैं (और, वास्तव में, आप जरूर) क्रमबद्ध डेटा स्टोर में डेटा को अपडेट करने और पढ़ने के सभी करते हैं नया तथा GetObjectData सबरूटीन्स। आपको एक जेनेरिक भी शामिल करना होगा नया कंस्ट्रक्टर (कोई पैरामीटर सूची नहीं) क्योंकि आप एक इंटरफ़ेस लागू कर रहे हैं।

कक्षा में सामान्य रूप से औपचारिक गुण और विधियां होंगी और साथ ही कोडित ...

'सामान्य संपत्ति
स्ट्रिंग के रूप में निजी newPropertyValue
सार्वजनिक संपत्ति NewProperty () स्ट्रिंग के रूप में
प्राप्त
NewPropertyValue लौटाएं
अंत मिलता है
सेट करें (स्ट्रिंग के रूप में बायल वैल्यू)
newPropertyValue = मान
अंतिम सेट
अंतिम संपत्ति
'सामान्य विधि
सार्वजनिक उप MyMethod ()
'विधि कोड
अंत उप

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

नया सबरूटीन कुछ इस तरह दिखेगा:

सार्वजनिक उप नया (_
SerializationInfo के रूप में byVal जानकारी, _
स्ट्रीमिंग के रूप में ByVal संदर्भ)
'अपने प्रोग्राम वेरिएबल्स को इनिशियलाइज़ करें
'एक क्रमबद्ध डेटा स्टोर
Parm1Name = जानकारी। GetString ( "एक")
Parm1Value = जानकारी। GetInt32 ( "बी")
'नया उप जारी है ...

कब deserialize a पर पुकारा जाता है BinaryFormatter ऑब्जेक्ट, इस उप को निष्पादित किया जाता है और ए SerializationInfo वस्तु को पारित किया है नया सबरूटीन। नया तब कर सकता है जो क्रमबद्ध डेटा मूल्यों के साथ आवश्यक है। उदाहरण के लिए ...

MsgBox ("यह Parm1Value Times Pi है:" _
& (Parm1Value * गणित पीआई) .ToString)

उल्टा तब होता है जब क्रमबद्ध करें कहा जाता है, लेकिन BinaryFormatter ऑब्जेक्ट कॉल GetObjectData बजाय।

सार्वजनिक उप GetObjectData (_
SerializationInfo के रूप में byVal जानकारी, _
ByVal संदर्भ के रूप में StreamingContext) _
इम्प्लीमेंटेबल इम्प्लीमेंटेबल। GetObjectData
'क्रमबद्ध डेटा स्टोर को अपडेट करें
'कार्यक्रम चर से
यदि Parm2Name = "टेस्ट" तब
जानकारी। AddValue ("a", "यह एक परीक्षण है।")
अन्य
जानकारी। AddValue ("a", "No test this time।")
अगर अंत
जानकारी। AddValue ("बी", 2)

ध्यान दें कि डेटा नाम / मान जोड़े के रूप में क्रमबद्ध फ़ाइल में जोड़ा जाता है।

इस लेख को लिखने में मैंने बहुत सारे वेब पेजों को वास्तविक कार्य कोड नहीं लगता है। एक आश्चर्य है कि क्या लेखक ने कभी-कभी लेख लिखने से पहले किसी भी कोड को निष्पादित किया है।

instagram story viewer