アプリケーション用のプラグイン dll を作成しています。アプリケーションは、次の方法でプラグイン アセンブリを読み込みます。
assembly = Assembly.Load(System.IO.File.ReadAllBytes(filename));
public クラスをシリアライズ/デシリアライズしようとすると、問題が発生します。次の連載に絞り込みました。
public BindingList<MyClass> MyClasses
{ get; set; }
これをコメントアウトしても問題ありません。私がシリアライズしようとすると:
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);
}
}
ser.Serialize(writer, 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.
私のクラスには、デフォルトの空のコンストラクターがあります。私はsgenを使ってみました。私が書いた単純なテストベッド アプリケーションでは、シリアライゼーションは正常に動作します...アセンブリが動的にロードされた場合にのみエラーが発生します。
さらに、この2つのスレッドから、
http://forums.gbpvr.com/showthread.php?30384-XMLSerializer-Problems-with-Plugins、http://forums.gbpvr.com/showthread.php?32197-System.XML-Deserialization
タイプを BindingList から ArrayList に変更して動作させることができることはわかっています。ただし、管理する設定がかなりあるため、データバインディングを引き続き機能させたいと考えています。
任意の入力をいただければ幸いです。