Je suis en train d'écrire un plugin dll pour une application. Les charges d'application du plugin ensembles via:XMLSerializer ne peut pas enregistrer/charger lorsqu'il est appelé à partir d'un assembly chargé dynamiquement à partir de l'application parente?
assembly = Assembly.Load(System.IO.File.ReadAllBytes(filename));
Le problème se manifeste lorsque je tente de linéariser/désérialiser une classe plublic. Je l'ai réduit à la sérialisation de:
public BindingList<MyClass> MyClasses
{ get; set; }
Si je le commente, pas de problèmes. Si je tente de sérialisation avec:
public static void SaveSettingsFile()
{
try
{
XmlSerializer ser = new XmlSerializer(typeof(GameTimeSettings));
TextWriter writer = new StreamWriter(SettingPath);
ser.Serialize(writer, Settings.Instance);
writer.Close();
}
catch (Exception e)
{
Logger.ReportException("SaveSettingsFile", e);
Logger.ReportException("SaveSettingsFile->InnerException", e.InnerException);
}
}
Une exception est levée sur ser.Serialize (écrivain, Settings.Instance):
System.InvalidOperationException Msg=There is an error in XML document (0,, 0). ->
InnerException: Object reference not set to an instance of an object.
Ma classe a un défaut, constructeur vide. J'ai essayé d'utiliser sgen. Dans une simple application de banc d'essai que j'ai écrite, la sérialisation fonctionne bien ... c'est seulement quand l'assemblage est chargé dynamiquement qu'il y a faute.
En outre, à partir de ces deux fils,
http://forums.gbpvr.com/showthread.php?30384-XMLSerializer-Problems-with-Plugins, http://forums.gbpvr.com/showthread.php?32197-System.XML-Deserialization
Je sais que je peux changer le type de BindingList à ArrayList et le faire fonctionner; cependant, je voudrais garder la liaison de données fonctionnante car il y a beaucoup de paramètres à gérer.
Toute entrée serait appréciée.
Avez-vous déjà initialisé 'MyClasses'? Sinon, sa valeur est "null". –
J'initialise la classe. Comme je l'ai dit, "Dans une application de test simple que j'ai écrit, la sérialisation fonctionne bien ..." –