2010-04-07 10 views
1

J'utilise une classe singleton pour enregistrer toutes mes informations de paramètres. Il est d'abord utilisé en appelant Settings.ValidateSettings(@"C:\MyApp"). Le problème que j'ai est que 'Liste des contacts' provoque l'échec de xmlserializer à écrire le fichier de paramètres, ou à charger ces paramètres. Si je commente le List<T> alors je n'ai aucun problème à sauvegarder/charger le fichier xml. Qu'est-ce que je fais mal?. XmlSerializer .NET échoue avec la liste <T>

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

} 
+3

semble fonctionner pour moi - quelle erreur voyez-vous? – itowlson

Répondre

0

@itowlson Après votre réponse, j'ai chargé le fichier de code dans une nouvelle application de formulaires et cela a fonctionné. Le projet sur lequel je travaille est en fait un plugin d'un autre programme. Il est donc dû à des choses qui sont hors de mon contrôle qui causent le sérialiseur à échouer avec liste

Merci d'avoir répondu que cela a fonctionné pour vous, ce qui m'a aidé à réaliser ce qui se passe