2011-10-12 14 views
6

El uso de .NET 4/C# ...Deserialize para escribir cuyo espacio de nombres ha cambiado

necesito para deserializar los archivos de configuración antiguos que contienen la representación serializada de un tipo con nombre, por ejemplo, ns1.X. La serialización se ha realizado usando BinaryFormatter.

El problema es que, después de una ronda de refactorización, el tipo X se ha movido a un espacio de nombres diferente, digamos ns2.X.

He intentado crear un nuevo tipo ns1.X vacío que se deriva de NS2.x, y si bien esto evita la 'No encontraste tipo ns1.X' de error, las propiedades del objeto deserializado son todos null . Además, no se llama a los ctors en el proceso.

¿Alguna sugerencia?

+1

No estoy seguro de si esto puede resolver su problema ya que nunca lo he usado, pero recuerdo haber leído algo sobre TypeForwarding hace un tiempo: puede encontrar la información aquí: http: // msdn .microsoft.com/es-es/library/ms404275.aspx – Anton

+0

Interesante. Lo comprobaré. –

+0

Una búsqueda en Google encontró esto que podría ayudar: http://www.codeproject.com/KB/cs/DrawWithMouse.aspx#AdvancedBinarySerialization:DeserializinganObjectIntoaDifferentTypeThantheOneItwasSerializedInto9 – Dan

Respuesta

1

Necesitará usar un ISerializationSurregate para que esto suceda. No es demasiado difícil y Jeff Richter lo explica muy bien. Recomiendo su libro CLR Vía C# 3.

Cuestiones relacionadas