c# .net visual-studio-2008 xmlserializer

C#XmlSerializer BindingFailure



.net visual-studio-2008 (4)

Bien, he encontrado una solución. Nunca pude aceptar desactivar excepciones como respuesta. Solo parece estar mal ...

Lo que parece estar sucediendo es que en montajes anteriores o versiones anteriores de su ensamblaje actual, ciertas referencias se usaban externamente. A pesar de que su código puede haber abandonado esas referencias desde hace mucho tiempo, los nombres son aún, algunos misteriosos en alguna parte, que se buscan en el ensamblado.

Vaya a sus archivos AssemblyInfo.cs y encuentre ThemeInfo:

[assembly: ThemeInfo( ResourceDictionaryLocation.ExternalAssembly, //where theme specific resource dictionaries are located //(used if a resource is not found in the page, // or application resource dictionaries) ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located //(used if a resource is not found in the page, // app, or any theme specific resource dictionaries))]

Cambiar la primera ubicación a ''Ninguno'':

[assembly: ThemeInfo( ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located //(used if a resource is not found in the page, // or application resource dictionaries) ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located //(used if a resource is not found in the page, // app, or any theme specific resource dictionaries))]

¡Y mantén tus excepciones activadas! Estaré publicando esta respuesta a varias preguntas de esta naturaleza similar.

Obtengo un BindingFailure en una línea de código usando el XmlSerializer:

XmlSerializer s = new XmlSerializer(typeof(CustomXMLSerializeObject));

El ensamblado con el nombre para mostrar CustomXMLSerializeObject.XmlSerializers ''no se pudo cargar en el contexto de enlace'' LoadFrom ''del AppDomain con ID 1. La causa del error fue: System.IO.FileNotFoundException: No se pudo cargar el archivo o ensamblado XMLSerializeObject.XmlSerializers, Version = 1.4.0.0, Culture = neutral, PublicKeyToken = null ''o una de sus dependencias. El sistema no puede encontrar el archivo especificado.

El error es bastante largo y continúa explicando la información de estado anterior a la vinculación y los lugares en los que parecía tratar de encontrar el archivo.

El objeto personalizado que intento desrializar es relativamente simple: solo un conjunto de enteros privados y cadenas que tienen acceso público. Tengo una variable privada que es otra clase serializable, pero que no tiene más que cadenas privadas con acceso público.

La parte incómoda? Esto solo sucede cuando me deserializo. Esa línea de código funciona bien cuando serializo el objeto. Funciona bien y el objeto se deserializa y se rellena perfectamente. Realmente no nota ninguna pérdida de rendimiento o tiempo de carga largo.

¿Qué es exactamente esta advertencia (no es un error o una excepción, el programa funciona bien después)? ¿Por que sucede? ¿Cómo lo evito sin simplemente deshabilitar la advertencia?


De acuerdo con MS VS 2010 Feedback, así es como fue diseñado. Para evitar esta excepción y evitar una ralentización durante la ejecución en tiempo de ejecución, debe generar un ensamblado de serializador XML.

Hay tres herramientas que pude encontrar: Microsoft SGen , XGenPlus y Mvp.Xml.XGen . A partir de este post, desafortunadamente, ninguno de estos ha sido actualizado desde 2007.


De acuerdo con el error Strange XmlSerializer :

Esta excepción es parte del funcionamiento normal de XmlSerializer. Se espera y será capturado y manejado dentro del código del Framework. Solo ignóralo y continúa. Si le molesta durante la depuración, configure el depurador de Visual Studio para que solo se detenga en excepciones no controladas en lugar de todas las excepciones.

Probablemente se deba a las excepciones que elija monitorear.

¿Puede decirme cómo están configuradas sus excepciones? Depurar -> Excepciones

Si desmarca la casilla de verificación "Lanzada" para BindingFailure en los Administrated Debugging Assistants, la excepción debería desaparecer. O si no desea hacer esto, puede continuar ya que esta excepción es por diseño


Utilice el siguiente método para construir su instancia de xmlSerializer que solucionará el problema:

XmlSerializer s = XmlSerializer.FromTypes(new[] { typeof(CustomXMLSerializeObject) })[0];

entonces, no necesita desactivar los manejos de excepción.