我正在序列化一个类,我得到以下异常:
您必须在System.Configuration.SettingsPropertyCollection上实现默认访问器,因为它继承自ICollection。
执行以下行时:
XmlSerializer xs = new XmlSerializer(typeof(CustomConfiguration));
有任何帮助吗?
public class CustomConfiguration : ConfigurationObjectBase
{
public CustomConfiguration () { //DO NOTHING. }
[User]
public uint Version
{ get { return ((uint)(this["Version"])); }
set { this["Version"] = value; }
}
}
ConfigurationObjectBase 派生自 System.configuration.ApplicationSettingsBase 。
答案 0 :(得分:4)
“default accessor”是一个特殊属性,它返回基于集合的对象 它的索引。例如:
[Serializable()]
public class IntList : ICollection {
// Default Accessor Implementation
public int this[int index] {
get {
return 0;
}
set { /* Do Nothing */ }
}
}
因此无法在现有的第三方类中实现该功能。对ApplicationSettings使用xml序列化是非常糟糕的主意,使用Save(),Reload()和Reset()方法,或者使用自己不是从ApplicationSettingsBase CustomConfiguration类派生的。
答案 1 :(得分:0)
你必须有一个默认的构造函数,即一个不带任何参数的构造函数,就像这样....
class foo
{
public foo() {}
}
如果您尝试序列化的类没有,则XMLSerializer会抛出该异常。如果您尝试序列化内置类,则必须派生自己的类或创建包装类。