जवाबों:
जब आप एक .Net फ्रेमवर्क एप्लिकेशन में एक ऑब्जेक्ट बनाते हैं, तो आपको यह सोचने की ज़रूरत नहीं है कि डेटा को मेमोरी में कैसे संग्रहीत किया जाता है। क्योंकि .Net फ्रेमवर्क आपके लिए इसका ध्यान रखता है। हालाँकि, यदि आप किसी ऑब्जेक्ट की सामग्री को किसी फ़ाइल में संग्रहीत करना चाहते हैं, तो किसी अन्य प्रक्रिया के लिए ऑब्जेक्ट भेजें या इसे पूरे नेटवर्क में प्रसारित करें, आपको यह सोचना होगा कि ऑब्जेक्ट का प्रतिनिधित्व कैसे किया जाता है क्योंकि आपको एक अलग प्रारूप में बदलने की आवश्यकता होगी । इस रूपांतरण को SERIALIZATION कहा जाता है।
सीरियलाइज़ेशन डेवलपर को किसी ऑब्जेक्ट की स्थिति को बचाने और आवश्यकतानुसार इसे फिर से बनाने की अनुमति देता है, वस्तुओं के भंडारण के साथ-साथ डेटा एक्सचेंज भी प्रदान करता है। क्रमांकन के माध्यम से, एक डेवलपर वेब सेवा के माध्यम से दूरस्थ अनुप्रयोग में ऑब्जेक्ट भेजने, ऑब्जेक्ट को एक डोमेन से दूसरे डोमेन पर भेजने, फ़ायरवॉल के माध्यम से XML स्ट्रिंग के रूप में, या सुरक्षा या उपयोगकर्ता-विशिष्ट बनाए रखने जैसी क्रियाएं कर सकता है। अनुप्रयोगों में जानकारी।
SerializableAttribute
यह दर्शाने के लिए एक प्रकार पर लागू करें कि इस प्रकार के उदाहरणों को क्रमबद्ध किया जा सकता है। SerializableAttribute
यहां तक कि लागू करें यदि वर्ग भी ISerializable
अनुक्रम प्रक्रिया को नियंत्रित करने के लिए इंटरफ़ेस को लागू करता है।
एक प्रकार के सभी सार्वजनिक और निजी क्षेत्र SerializableAttribute
डिफ़ॉल्ट रूप से क्रमबद्ध होते हैं, जब तक कि प्रकार ISerializable
क्रमांकन प्रक्रिया को ओवरराइड करने के लिए इंटरफ़ेस को लागू नहीं करता है। डिफ़ॉल्ट क्रमांकन प्रक्रिया उन क्षेत्रों को शामिल करती है जो चिह्नित हैं NonSerializedAttribute
। यदि किसी अनुक्रमिक प्रकार के क्षेत्र में एक सूचक, एक हैंडल या कुछ अन्य डेटा संरचना होती है जो किसी विशेष वातावरण के लिए विशिष्ट होती है, और एक अलग वातावरण में सार्थक रूप से पुनर्गठित नहीं की जा सकती है, तो आप NonSerializedAttribute
उस फ़ील्ड पर लागू करना चाह सकते हैं ।
अधिक विवरण के लिए MSDN देखें ।
संपादित करें 1
क्रमिक रूप से कुछ चिह्नित नहीं करने का कोई कारण
डेटा स्थानांतरित या सहेजते समय, आपको केवल आवश्यक डेटा भेजने या सहेजने की आवश्यकता होती है। इसलिए ट्रांसफर में देरी और स्टोरेज की समस्या कम होगी। तो आप क्रमबद्ध करते समय डेटा का अनावश्यक हिस्सा चुन सकते हैं।
[Serializable]
विशेषता के लिए कुछ व्यावहारिक उपयोग :
BinaryFormatter
System.Runtime.Serialization.Formatters.Binary में क्लास देखें।Clipboard.SetData()
- गैर- उपयोग योग्य कक्षाएं क्लिपबोर्ड पर नहीं रखी जा सकती हैं।MarshalByRefObject
) धारावाहिक होना चाहिए।ये सबसे आम उपयोग के मामले हैं जो मुझे सामने आए हैं।
चूंकि मूल प्रश्न SerializableAttribute के बारे में था, इसलिए यह ध्यान दिया जाना चाहिए कि यह विशेषता केवल BinaryFormatter या SoapFormatter का उपयोग करते समय लागू होती है।
यह थोड़ा भ्रामक है, जब तक आप वास्तव में विवरणों पर ध्यान नहीं देते हैं, जैसे कि इसका उपयोग कब करना है और इसका वास्तविक उद्देश्य क्या है।
इसका XML या JSON क्रमांकन के साथ कुछ भी नहीं है।
SerializableAttribute के साथ उपयोग ISerializable इंटरफ़ेस और SerializationInfo वर्ग हैं। ये भी केवल बाइनरीफ़ॉर्मेटर या सोपफ़ॉर्मेटर के साथ उपयोग किए जाते हैं।
जब तक आप बाइनरी या साबुन का उपयोग करके अपनी कक्षा को क्रमबद्ध करने का इरादा नहीं करते हैं, तब तक अपनी कक्षा को [सीरियल योग्य] के रूप में चिह्नित करने से परेशान न करें। एक्सएमएल और जेएसएन धारावाहिकों को इसके अस्तित्व के बारे में भी पता नहीं है।
Serializable
, और जब विशेषता को हटा दिया गया था। तो कुछ हस्तक्षेप संभव है।
सीरियलाइज़ेशन किसी वस्तु को बाइट्स की धारा में परिवर्तित करने की प्रक्रिया है ताकि ऑब्जेक्ट को स्टोर किया जा सके या इसे मेमोरी, एक डेटाबेस, या एक फ़ाइल में प्रसारित किया जा सके।
कैसे काम करता है सीरियलाइजेशन
यह चित्रण क्रमबद्धता की समग्र प्रक्रिया को दर्शाता है।
ऑब्जेक्ट को एक धारा में क्रमबद्ध किया जाता है, जो न केवल डेटा को ले जाता है, बल्कि ऑब्जेक्ट के प्रकार, जैसे कि इसके संस्करण, संस्कृति और विधानसभा के नाम के बारे में जानकारी प्राप्त करता है। उस स्ट्रीम से, इसे डेटाबेस, फ़ाइल या मेमोरी में स्टोर किया जा सकता है।
यहाँ संक्षिप्त उदाहरण है कि कैसे क्रमांकन काम करता है। मैं भी उसी के बारे में सीख रहा था और मुझे दो लिंक उपयोगी लगे। Serialization क्या है और इसे .NET में कैसे किया जा सकता है ।
क्रमांकन की व्याख्या करने वाला एक नमूना कार्यक्रम
यदि आप उपरोक्त कार्यक्रम को नहीं समझते हैं, तो स्पष्टीकरण के साथ एक बहुत सरल कार्यक्रम यहां दिया गया है ।
क्रमबद्धता
सीरियलाइज़ेशन एक ऑब्जेक्ट या ऑब्जेक्ट्स ग्राफ के एक सेट को एक स्ट्रीम में परिवर्तित करने की प्रक्रिया है, यह बाइनरी क्रमांकन के मामले में एक बाइट सरणी है
सीरियलाइजेशन के उपयोग
नीचे कुछ उपयोगी कस्टम विशेषताएँ दी गई हैं जो किसी ऑब्जेक्ट के क्रमांकन के दौरान उपयोग की जाती हैं
[Serializable] -> इसका उपयोग तब किया जाता है जब हम किसी वस्तु के क्रमिक [NonSerialized] को चिह्नित करते हैं -> इसका उपयोग तब किया जाता है जब हम किसी वस्तु के क्षेत्र को क्रमबद्ध नहीं करना चाहते। [OnSerializing] -> इसका उपयोग तब किया जाता है जब हम किसी वस्तु को क्रमबद्ध करते हुए कुछ क्रिया करना चाहते हैं [OnSerialized] -> इसका उपयोग तब किया जाता है जब हम किसी वस्तु को धारा में प्रवाहित करने के बाद कुछ क्रिया करना चाहते हैं।
नीचे क्रमबद्धता का उदाहरण दिया गया है
[Serializable]
internal class DemoForSerializable
{
internal string Fname = string.Empty;
internal string Lname = string.Empty;
internal Stream SerializeToMS(DemoForSerializable demo)
{
DemoForSerializable objSer = new DemoForSerializable();
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, objSer);
return ms;
}
[OnSerializing]
private void OnSerializing(StreamingContext context) {
Fname = "sheo";
Lname = "Dayal";
}
[OnSerialized]
private void OnSerialized(StreamingContext context)
{
// Do some work after serialized object
}
}
यहाँ कॉलिंग कोड है
class Program
{
string fname = string.Empty;
string Lname = string.Empty;
static void Main(string[] args)
{
DemoForSerializable demo = new DemoForSerializable();
Stream ms = demo.SerializeToMS(demo);
ms.Position = 0;
DemoForSerializable demo1 = new BinaryFormatter().Deserialize(ms) as DemoForSerializable;
Console.WriteLine(demo1.Fname);
Console.WriteLine(demo1.Lname);
Console.ReadLine();
}
}
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-mean