मैं अपने वीबी समाधान में मुख्य वर्ग को क्रमबद्ध करने की कोशिश कर रहा हूं। मैंने अपनी कक्षा के शीर्ष पर 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 वर्ग के शीर्ष पर परिभाषित किया है।

किसी भी मदद के लिए धन्यवाद।

2
Flash 5 अप्रैल 2011, 12:07

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 करना सुनिश्चित करें।
3
Heinzi 5 अप्रैल 2011, 12:39
धन्यवाद, यह त्रुटि बताता है। समस्या यह है कि मुझे फॉर्म 1 कक्षा में इन वस्तुओं की काफी बड़ी संख्या मिली है (जहां तक ​​​​मुझे पता है सभी धारावाहिक) और मैं प्रत्येक को स्पष्ट रूप से क्रमबद्ध करने से बचने की उम्मीद कर रहा था। अगर मैं उन वस्तुओं को स्थानांतरित करता हूं जिन्हें मैं एक अलग वर्ग में जारी रखना चाहता हूं, तो क्या यह काम करेगा? अन्यथा, क्या आप संभवतः समझा सकते हैं कि मुझे उसी क्रम में deserialize करने की आवश्यकता क्यों है? चियर्स
 – 
Flash
5 अप्रैल 2011, 13:28
@ एंड्रयू: हाँ, उन्हें एक अलग वर्ग में रखना चाहिए। आपको इस वर्ग को <Serializable()> के रूप में चिह्नित करना होगा। वैसे भी यूजर इंटरफेस (फॉर्म1) और डेटा (आपकी नई कक्षा) को अलग करना अच्छा अभ्यास है।
 – 
Heinzi
5 अप्रैल 2011, 15:22
@Andrew: आपको उन्हें उसी क्रम में deserialize करने की आवश्यकता है, क्योंकि आपकी फ़ाइल स्ट्रीम में bytesForObject1 bytesForObject2 ... होगा, और bytesForObject1 में से किसी ऑब्जेक्ट 2 को फिर से बनाना काम नहीं करेगा। ;-)
 – 
Heinzi
5 अप्रैल 2011, 15:23