close
將先前版本的assembly資訊替換為目前執行檔的assembly資訊,避免format檢查失敗
[VB]
Class TypeCompatibility Inherits System.Runtime.Serialization.SerializationBinder Public Overrides Function BindToType(assemblyName As String, typeName As String) As Type Dim returntype As Type = Nothing If (assemblyName.Contains("old assembly name")) Then assemblyName = Assembly.GetExecutingAssembly().FullName returntype = Type.GetType(String.Format("{0}, {1}", typeName, assemblyName)) Return returntype End If Return returntype End Function End Class Public Function LoadFile() As Boolean Dim PreSave As MyClass If Not IO.File.Exists(mFilePath) Then MsgBox("Can't find file.") : Return False Using fs As New IO.FileStream(mFilePath, IO.FileMode.Open) Dim formatter As New BinaryFormatter Try formatter.Binder = New TypeCompatibility PreSave = DirectCast(formatter.Deserialize(fs), MyClass) Catch ex As Exception Return False End Try End Using .... End Function
[c#]
sealed class TypeCompatibility : System.Runtime.Serialization.SerializationBinder { public override Type BindToType(string assemblyName, string typeName) { Type returntype = null; if (assemblyName.Contains("old assembly name")) { assemblyName = Assembly.GetExecutingAssembly().FullName; returntype = Type.GetType(String.Format("{0}, {1}", typeName, assemblyName)); return returntype; } return returntype; } } public bool LoadFile() { MyClass PreSave; if (!System.IO.File.Exists(mFilePath)) { Interaction.MsgBox("Can't find file."); return false; } using (System.IO.FileStream fs = new System.IO.FileStream(mFilePath, System.IO.FileMode.Open)) { BinaryFormatter formatter = new BinaryFormatter(); try { formatter.Binder = new TypeCompatibility(); PreSave = (MyClass)formatter.Deserialize(fs); } catch (Exception ex) { return false; } }
全站熱搜