C# 在启动时加载时,反序列化会导致InvalidOperationException

C# 在启动时加载时,反序列化会导致InvalidOperationException,c#,wpf,xml-serialization,C#,Wpf,Xml Serialization,我有一个类,可以在我的WPF应用程序加载后轻松地序列化和反序列化。我现在尝试添加在项目文件中传递时在启动时加载项目的功能。不幸的是,它抛出了一个InvalidOperation异常,声明: XML文档2、2中存在错误。-->System.InvalidOperationException:不应为 WeightingParametersBit是我试图序列化的类的成员类型。它基本上只是一个字典的容器。奇怪的是,这个文件没有包含一个标签,因为Jon Skeet在正确的轨道上。直到我的应用程序完全加载后

我有一个类,可以在我的WPF应用程序加载后轻松地序列化和反序列化。我现在尝试添加在项目文件中传递时在启动时加载项目的功能。不幸的是,它抛出了一个InvalidOperation异常,声明:

XML文档2、2中存在错误。-->System.InvalidOperationException:不应为


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