C# 在启动时加载时,反序列化会导致InvalidOperationException
我有一个类,可以在我的WPF应用程序加载后轻松地序列化和反序列化。我现在尝试添加在项目文件中传递时在启动时加载项目的功能。不幸的是,它抛出了一个InvalidOperation异常,声明: XML文档2、2中存在错误。-->System.InvalidOperationException:不应为C# 在启动时加载时,反序列化会导致InvalidOperationException,c#,wpf,xml-serialization,C#,Wpf,Xml Serialization,我有一个类,可以在我的WPF应用程序加载后轻松地序列化和反序列化。我现在尝试添加在项目文件中传递时在启动时加载项目的功能。不幸的是,它抛出了一个InvalidOperation异常,声明: XML文档2、2中存在错误。-->System.InvalidOperationException:不应为 WeightingParametersBit是我试图序列化的类的成员类型。它基本上只是一个字典的容器。奇怪的是,这个文件没有包含一个标签,因为Jon Skeet在正确的轨道上。直到我的应用程序完全加载后
WeightingParametersBit是我试图序列化的类的成员类型。它基本上只是一个字典的容器。奇怪的是,这个文件没有包含一个标签,因为Jon Skeet在正确的轨道上。直到我的应用程序完全加载后,我才更改当前的工作目录,因此它找不到该文件
非常隐晦的异常当它只是应该是FileNotFoundException时命名空间是否需要在任何地方定义?你确定它实际上正在加载同一个文件吗?@brumcouse我不知道@Jon Skeet加载事件期间和之后的执行相同;据我所知,它与我运行的模拟加载事件问题的文件相同。我不确定是什么导致了这个问题,我通常在构造函数的InitializeComponent语句之后启动一个计时器。
public class WeightSettings
{
public double UserScoreSlagging;
public double UserScoreFouling;
public WeightMode BitWeightMode = WeightMode.Manual;
public WeightMode LigWeightMode = WeightMode.Manual;
public WeightingParametersBit BitWeights = new WeightingParametersBit();
public WeightingParametersLig LigWeights = new WeightingParametersLig();
}
<?xml version="1.0" encoding="utf-8"?>
<WeightSettings>
<UserScoreSlagging>0</UserScoreSlagging>
<UserScoreFouling>0</UserScoreFouling>
<BitWeightMode>Manual</BitWeightMode>
<LigWeightMode>Manual</LigWeightMode>
<BitWeights>
<bituminous>
...
</bituminous>
</BitWeights>
<LigWeights>
<lignitic>
...
</lignitic>
</LigWeights>
</WeightSettings>
public static void Serialize<T>(this T source, TextWriter writer)
{
// Don't serialize a null object
if (Object.ReferenceEquals(source, null))
{
throw new ArgumentException("Trying to serialize null object.", "source");
}
XmlSerializer s = new XmlSerializer(typeof(T));
s.Serialize(writer, source);
writer.WriteLine();
}
public static T Deserialize<T>(this T source, TextReader reader)
{
XmlSerializer s = new XmlSerializer(typeof(T));
source = (T)s.Deserialize(reader);
return source;
}