我正在为应用程序编写插件 dll。应用程序通过以下方式加载插件程序集:
assembly = Assembly.Load(System.IO.File.ReadAllBytes(filename));
当我尝试序列化/反序列化一个公共类时,问题就显现出来了。我把它缩小到序列化:
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。在我编写的一个简单的测试平台应用程序中,序列化工作正常......只有在动态加载程序集时才会出错。
此外,从这两个线程中,
http://forums.gbpvr.com/showthread.php?30384-XMLSerializer-Problems-with-Plugins , http://forums.gbpvr.com/showthread.php?32197-System.XML-Deserialization
我知道我可以将类型从 BindingList 更改为 ArrayList 并让它工作;但是,我想保持数据绑定正常工作,因为有很多设置需要管理。
任何输入将不胜感激。