Почему я получаю ошибку сериализации?

У меня есть следующий код:

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)); .

Итак, я перешел в режим «Отладка / исключение» и включил «Помощники по управляемой отладке». В этой строке я получил следующее:

Сборка с отображаемым именем «mscorlib.XmlSerializers» не удалось загрузить в контекст привязки «LoadFrom» домена приложения с идентификатором 1. Причина сбоя: System.IO.FileNotFoundException: не удалось загрузить файл или сборку mscorlib.XmlSerializers, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 или одну из их зависимостей. Система не может найти указанный файл. Имя файла: 'mscorlib.XmlSerializers, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089'

Может кто-нибудь объяснить, почему это происходит? Могу ли я что-нибудь сделать с классом UserSetting , чтобы проблема исчезла? Приложение довольно чувствительно к производительности, и я бы предпочел не иметь исключения.

9
задан AngryHacker 18 August 2010 в 23:12
поделиться

1 ответ

Microsoft сообщает :

XmlSerializer пытается загрузить предварительно сгенерированные сериализаторы, чтобы избежать компиляция кода сериализации на лету. Нет простого способа проверьте "будет ли сборка найдена вызов Assembly.Load () ", это будет дублирование поиска пути Fusion и логика загрузчика в XmlSerializer.

Похоже, что исключение FileNotFound генерируется и обрабатывается в XmlSerializer, когда «предварительно сгенерированный сериализатор» не может быть найден, что затем приведет к генерации кода сериализации.

10
ответ дан 4 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: