У меня есть следующий код:Почему я получаю ошибку сериализации?
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; }
}
код работает отлично и вызов GetObjFromXmlDocument возвращающее коллекцию List. Тем не менее, я всегда получаю исключение из первого варианта типа System.IO.FileNotFoundException
в mscorlib.dll, когда выполняется XmlSerializer serializer = new XmlSerializer(typeof(T));
.
Итак, я пошел в Debug/Exception и включил помощников по управлению отладкой. Я получил следующее по этой линии:
узел с «mscorlib.XmlSerializers» Отображаемое имя 'не удалось загрузить в «LoadFrom» связывания контекста AppDomain с идентификатором 1. причина отказа была: Система. IO.FileNotFoundException: Не удалось загрузить файл или сборку «mscorlib.XmlSerializers, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089» или одну из его зависимостей. Система не может найти указанный файл. Имя файла: 'mscorlib.XmlSerializers, Version = 2.0.0.0, культура = нейтральной, PublicKeyToken = b77a5c561934e089'
Может кто-нибудь объяснить, почему это происходит? Есть ли что-то, что я могу сделать для класса UserSetting
, чтобы проблема исчезла? Приложение довольно чувствительно к производительности, и я бы предпочел не иметь исключения.
Спасибо, это очень полезно! Подробнее об этом, если вы видите это во время отладки, просто нажмите F5, и ваша программа продолжит движение (это не сбой ... по крайней мере, не b/c этого). –