1

我正在使用单例类来保存我的所有设置信息。它首先通过调用来使用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;

}
4

1 回答 1

0

@itowlson 在您回复后,我将代码文件加载到一个新的表单应用程序中并且它工作。我正在做的项目实际上是另一个程序的插件。所以这是由于我无法控制的事情导致序列化程序因 List 而失败

感谢您回复它对您有用,这帮助我意识到发生了什么

于 2010-04-08T02:38:22.597 回答