views:

51

answers:

1

I'm using a singleton class to save all my settings info. It's first utilized by calling Settings.ValidateSettings(@"C:\MyApp").

The problem I'm having is that 'List Contacts' is causing the xmlserializer to fail to write the settings file, or to load said settings. If I comment out the List<T> then I have no problems saving/loading the xml file. What am I doing wrong?

// 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;

}
A: 

@itowlson After your reply I loaded the code file into a new forms application and it worked. The project I'm working on though is actually a plugin of another program. So it's due to things that are out of my control that are causing the serializer to fail with List

Thanks for replying that it worked for you, which helped me to realize what's happening

Redshirt