Tengo el siguiente código:¿Por qué me sale un error de serialización?
class Program
{
static void Main(string[] args)
{
string xml = @"<ArrayOfUserSetting>
<UserSetting>
<Value>Proposals</Value>
<Name>LastGroup</Name>
</UserSetting>
<UserSetting>
<Value>Visible</Value>
<Name>WidgetsVisibility</Name>
</UserSetting>
</ArrayOfUserSetting>";
List<UserSetting> settings =
GetObjFromXmlDocument<List<UserSetting>>(xml);
}
public static T GetObjFromXmlDocument<T>(string xml)
{
T customType;
XmlSerializer serializer = new XmlSerializer(typeof(T));
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
using (XmlNodeReader xmlNodeReader = new XmlNodeReader(xmlDocument))
{
customType = (T)serializer.Deserialize(xmlNodeReader);
}
return customType;
}
}
[Serializable]
public class UserSetting
{
public string Value { get; set; }
public string Name { get; set; }
}
El código funciona bien y el llamado a GetObjFromXmlDocument produce una colección de listas. Sin embargo, siempre obtengo una excepción de primera oportunidad del tipo System.IO.FileNotFoundException
en mscorlib.dll, cuando se ejecuta XmlSerializer serializer = new XmlSerializer(typeof(T));
.
Así que entré en Debug/Exception y activé los Asistentes de depuración administrados. Tengo el siguiente en esa línea:
El montaje con 'mscorlib.XmlSerializers' nombre para mostrar no se pudo cargar en el 'LoadFrom' contexto del dominio de aplicación vinculante con ID 1. La causa de la falla fue: Sistema. IO.FileNotFoundException: No se pudo cargar el archivo o ensamblado 'mscorlib.XmlSerializers, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' o una de sus dependencias. El sistema no puede encontrar el archivo especificado. Nombre del archivo: 'mscorlib.XmlSerializers, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'
¿Puede alguien explicar por qué ocurre esto? ¿Hay algo que pueda hacer en la clase UserSetting
para que el problema desaparezca? La aplicación es bastante sensible al rendimiento y prefiero no tener la excepción.
Gracias, esto es muy útil! Más al respecto, si ve esto mientras depura, simplemente presione F5 y su programa continuará (no se bloqueará ... al menos no b/c de esto). –