मैं अपने वीबी समाधान में मुख्य वर्ग को क्रमबद्ध करने की कोशिश कर रहा हूं। मैंने अपनी कक्षा के शीर्ष पर Serializable विशेषता को इस प्रकार जोड़ा है:
<Serializable()>
Public Class Form1
और मैं क्रमबद्ध करने के लिए निम्न कोड का उपयोग कर रहा हूं:
Public Sub serializeThis()
Dim fStream As FileStream
Try
fStream = New FileStream("C:\ObjectData.bin", FileMode.Create)
Dim bfmtr As New BinaryFormatter
bfmtr.Serialize(fStream, Me)
fStream.Close()
Catch ex As Exception
MsgBox("Failed to serialize: " & ex.Message)
Throw
End Try
End Sub
जब मैं इस विधि को कॉल करता हूं तो मुझे त्रुटि मिलती है:
असेंबली में 'System.Windows.Forms.Form' टाइप करें 'System.Windows.Forms, Version=4.0.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' को क्रमबद्ध के रूप में चिह्नित नहीं किया गया है।
मुझे लगता है कि ऐसा इसलिए है क्योंकि आप कक्षा या कुछ से जुड़े फॉर्म को क्रमबद्ध नहीं कर सकते हैं, लेकिन मैं वास्तव में नहीं जानता कि मैं क्या कर रहा हूं।
क्या मैं इस त्रुटि को प्राप्त किए बिना किसी भी तरह मेरी फॉर्म 1 कक्षा में निहित सभी वस्तुओं को क्रमबद्ध कर सकता हूं? मैं प्रपत्र नियंत्रणों के बारे में कोई डेटा संग्रहीत नहीं करना चाहता, मुझे केवल उन सभी वस्तुओं को सहेजने की आवश्यकता है जिन्हें मैंने Form1
वर्ग के शीर्ष पर परिभाषित किया है।
किसी भी मदद के लिए धन्यवाद।
1 उत्तर
चूँकि Form
क्रमानुसार नहीं है, आप प्रपत्र को स्वयं क्रमांकित नहीं कर सकते। (फॉर्म आपकी Form1
कक्षा से संलग्न नहीं है। आपका Form1
वर्ग है फॉर्म, क्योंकि यह System.Windows.Forms.Form
से निकला है। )
हालाँकि, आप जो कर सकते हैं, वह केवल उन वस्तुओं को क्रमबद्ध करना है जिन्हें आप क्रमबद्ध करना चाहते हैं:
Public Sub SerializeThis()
Dim fStream As FileStream
Try
fStream = New FileStream("C:\ObjectData.bin", FileMode.Create)
Dim bfmtr As New BinaryFormatter()
bfmtr.Serialize(fStream, object1)
bfmtr.Serialize(fStream, object2)
bfmtr.Serialize(fStream, object3)
' ...
fStream.Close()
Catch ex As Exception
MsgBox("Failed to serialize: " & ex.Message)
Throw
End Try
End Sub
देखने के लिए दो चीजें हैं:
- उन सभी वस्तुओं के वर्ग जिन्हें आप क्रमबद्ध करना चाहते हैं (ऑब्जेक्ट 1, ऑब्जेक्ट 2, ...) को
<Serializable()>
के रूप में चिह्नित किया जाना चाहिए। आप इसे दस्तावेज़ में देख सकते हैं (उदाहरण: Hashtable क्रमबद्ध के रूप में चिह्नित किया गया है)। - वस्तुओं को उसी क्रम में deserialize करना सुनिश्चित करें।
संबंधित सवाल
नए सवाल
vb.net
Visual Basic.NET (VB.NET) एक बहु-प्रतिमान, प्रबंधित, प्रकार-सुरक्षित, ऑब्जेक्ट-उन्मुख कंप्यूटर प्रोग्रामिंग भाषा है। C # और F # के साथ, यह .NET फ्रेमवर्क को लक्षित करने वाली मुख्य भाषाओं में से एक है। VB.NET को Microsoft के Visual Basic 6 (VB6) के विकास के रूप में देखा जा सकता है लेकिन Microsoft .NET फ्रेमवर्क पर लागू किया जा सकता है। VB6, VBA या VBScript प्रश्नों के लिए इस टैग का उपयोग न करें।
<Serializable()>
के रूप में चिह्नित करना होगा। वैसे भी यूजर इंटरफेस (फॉर्म1) और डेटा (आपकी नई कक्षा) को अलग करना अच्छा अभ्यास है।bytesForObject1 bytesForObject2 ...
होगा, औरbytesForObject1
में से किसी ऑब्जेक्ट 2 को फिर से बनाना काम नहीं करेगा। ;-)