Сбой .NET XmlSerializer с List <T> - PullRequest
       39

Сбой .NET XmlSerializer с List <T>

1 голос
/ 07 апреля 2010

Я использую одноэлементный класс, чтобы сохранить всю информацию о моих настройках. Сначала он используется по телефону Settings.ValidateSettings(@"C:\MyApp").

Проблема, с которой я столкнулся, заключается в том, что «Список контактов» приводит к тому, что xmlserializer не может записать файл настроек или загрузить эти настройки. Если я закомментирую List<T>, то у меня не будет проблем с сохранением / загрузкой XML-файла. Что я делаю не так?

// The actual settings to save  

public class MyAppSettings
{
    public bool FirstLoad
    { get; set; }

    public string VehicleFolderName
    { get; set; }

    public string ContactFolderName
    { get; set; }

    public List<ContactInfo> Contacts
    {
        get
        {
            if (contacts == null)
                contacts = new List<ContactInfo>();
            return contacts;
        }
        set
        {
            contacts = value;
        }
    }

    private List<ContactInfo> contacts;
}

// The class in which the settings are manipulated
public static class Settings
{
    public static string SettingPath;
    private static MyAppSettings instance;
    public static MyAppSettings Instance
    {
        get
        {
            if (instance == null)
                instance = new MyAppSettings();
            return instance;
        }
        set
        {
            instance = value;
        }
    }

    public static void InitializeSettings(string path)
    {
        SettingPath = Path.GetFullPath(path + "\\MyApp.xml");
        if (File.Exists(SettingPath))
        {
            LoadSettings();
        }
        else
        {
            Instance.FirstLoad = true;
            Instance.VehicleFolderName = "Cars";
            Instance.ContactFolderName = "Contacts";
            SaveSettingsFile();
        }
    }

    // load the settings from the xml file
    private static void LoadSettings()
    {
        XmlSerializer ser = new XmlSerializer(typeof(MyAppSettings));

        TextReader reader = new StreamReader(SettingPath);
        Instance = (MyAppSettings)ser.Deserialize(reader);
        reader.Close();
    }

    // Save the settings to the xml file
    public static void SaveSettingsFile()
    {
        XmlSerializer ser = new XmlSerializer(typeof(MyAppSettings));

        TextWriter writer = new StreamWriter(SettingPath);
        ser.Serialize(writer, Settings.Instance);
        writer.Close();

    }

    public static bool ValidateSettings(string initialFolder)
    {
        try
        {
            Settings.InitializeSettings(initialFolder);
        }
        catch (Exception e)
        {
             return false;
        }

        // Do some validation logic here

        return true;
    }
}

// A utility class to contain each contact detail
public class ContactInfo
{
    public string ContactID;
    public string Name;
    public string PhoneNumber;
    public string Details;
    public bool Active;
    public int SortOrder;

}

1 Ответ

0 голосов
/ 08 апреля 2010

@ itowlson После вашего ответа я загрузил файл кода в новое приложение форм, и оно заработало. Проект, над которым я работаю, на самом деле является плагином другой программы. Так что это из-за вещей, которые находятся вне моего контроля, которые вызывают сбой сериализатора с List

Спасибо, что ответили, что это сработало для вас, что помогло мне понять, что происходит

...