我有一个类,可以在我的WPF应用程序加载后轻松地序列化和反序列化。我现在正试图添加在传入项目文件时在启动时加载项目的功能。不幸的是,它正在引发InvalidOperationException,声明:
There is an error in XML document (2, 2). ---> System.InvalidOperationException: <WeightingParametersBit xmlns=''> was not expected.
这个
WeightingParametersBit
是我试图序列化的类的成员的类型。它基本上只是一个字典的容器。奇怪的是,文件不包含
<WeightingParametersBit xmlns=....
文件中的任何地方。一旦抛出此异常并启动应用程序。如果单击“加载”按钮并选择同一个项目文件,则加载效果会很好。
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(为了查看目的而缩减):
<?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;
}
对反序列化的调用来自名为
WeightSettings
权重设置
)不为空:
WeightSettings = WeightSettings.Deserialize(sr);
我怎样才能纠正这种行为?或许更重要的是:为什么我只在加载了窗口的事件上看到这种行为?