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;
                }
            }
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 lalalah 的頭像
    lalalah

    Truly Madly Deeply

    lalalah 發表在 痞客邦 留言(0) 人氣()