मैं एक कस्टम वर्ग MyClass
लिखा गया है और यह <Serializable()>
विशेषता के साथ चिह्नित है। मेरे हार्ड ड्राइव पर बाइनरी फाइलों का एक सेट है जिसे मैंने BinaryFormatter
का उपयोग करके क्रमबद्ध किया है जो MyClass
के उदाहरणों से आया है।क्या अंतर्निहित वर्ग थोड़ा बदल दिया गया है जब मैं किसी ऑब्जेक्ट को deserialize कर सकते हैं?
मैं हाल ही में (,, कुछ गुण जोड़ा कुछ गुण नष्ट कर दिया कुछ तरीकों, आदि परिवर्तित) थोड़ा MyClass
की संरचना बदल दिया है।
जब मैं इस बदली हुई वर्ग नीचे कोड का उपयोग करने के मौजूदा वस्तुओं deserialize करने की कोशिश क्या होता है? मैंने कोशिश की है और कोई फेंक दिया गया या कुछ भी नहीं था - लेकिन निश्चित रूप से यह वर्ग बदलने पर ठीक से deserialize नहीं कर सकता है? क्या कोई तरीका है कि मैं धारावाहिक फ़ाइलों से कुछ उपयोगी जानकारी प्राप्त कर सकता हूं भले ही मैंने कक्षा को अद्यतन किया हो?
धन्यवाद।
Public Sub serializeObject(ByVal obj As Object, ByVal outFilename As String)
Dim fStream As FileStream
Try
fStream = New FileStream(outFilename, FileMode.Create)
Dim bfmtr As New BinaryFormatter
bfmtr.Serialize(fStream, obj)
fStream.Close()
Catch ex As Exception
MsgBox("Failed to serialize: " & ex.Message)
Throw
End Try
End Sub
और अक्रमांकन मैं उपयोग कर रहा हूँ करने के लिए:
myObj = CType(deserializeObject("C:\myobject.bin"), MyClass))
कहाँ deserializeObject
है:
यहाँ कोड मैं क्रमबद्धता करने के लिए उपयोग कर रहा हूँ है
Public Function deserializeObject(ByVal srcFilename As String) As Object
If File.Exists(srcFilename) Then
Dim fStream As Stream = File.OpenRead(srcFilename)
Dim deserializer As New BinaryFormatter
Dim returnObject As Object = deserializer.Deserialize(fStream)
fStream.Close()
Return returnObject
Else
Throw New ApplicationException("File not found: " & srcFilename)
End If
End Function
यदि आप फ़ील्ड्स को हटाते हैं, तो यदि सीरियलाइज्ड डेटा में संपत्ति मौजूद है तो आपको एक त्रुटि मिलेगी। खेतों को जोड़ना ठीक होना चाहिए। आप असेंबली वर्जन # या मजबूत नामकरण कुंजी भी नहीं बदल सकते क्योंकि इससे विलुप्त होने में असफलता भी हो जाएगी। –
@Robert। आप इसके बारे में पूरी तरह से गलत हैं। यदि प्रत्येक संपत्ति को धारावाहिक प्रारूप में मौजूद होना आवश्यक था तो हमारे पास डेटा अनुबंध गुण नहीं होंगे जैसे [IgnoreDataMember]। – BentOnCoding
यह बाइनरी क्रमबद्धता है। जब आप एक्सएमएल सीरियलाइजेशन का जिक्र कर रहे हों तो आप सही हैं, लेकिन बाइनरी सीरियलाइजेशन deserialization पर असफल हो जाएगा यदि आप serialization के बाद किसी ऑब्जेक्ट से कोई संपत्ति हटाते हैं। –