XMLSerialize异常

时间:2010-02-25 05:00:49

标签: c# winforms xml-serialization

我正在序列化一个类,我得到以下异常:

  

您必须在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

2 个答案:

答案 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会抛出该异常。如果您尝试序列化内置类,则必须派生自己的类或创建包装类。