2010-02-25 50 views
5

我序列化類,我得到以下異常:XMLSerialize來異常

,因爲它自ICollection繼承您必須實現上System.Configuration.SettingsPropertyCollection默認訪問。

當執行以下行:

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

+1

你可以顯示你的CustomConfiguration類的任何版本(尤其是繼承等)嗎? – 2010-02-25 05:23:02

+0

公共類CustomConfiguration:ConfigurationObjectBase { public CustomConfiguration() { // DO NOTHING。 } ///

///版本 /// [用戶] 公共UINT版本 { 得到 { 回報((UINT)(本[ 「版本」)); } set { this [「Version」] = value; }} } ConfigurationObjectBase從System.configuration.ApplicationSettingsBase – siva 2010-02-25 05:37:30

+0

衍生我能問你爲什麼想反正序列化此?似乎有點奇怪。 – 2010-02-25 09:59:46

回答

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類。

0

你必須有一個默認的構造函數,也就是一個不帶任何參數,像這樣....

class foo 
{ 
    public foo() {} 
} 

,如果你想序列化類沒有一個,XMLSerializer的拋出異常。如果你試圖序列化一個內置的類,你將不得不派生你自己的或創建一個包裝類。

+0

注意類型是'System.Configuration.SettingsPropertyCollection' ...不容易編輯。 – 2010-02-25 05:21:58

+0

添加默認構造函數也不起作用。 – siva 2010-02-25 05:43:18

+0

引發相同的異常 – siva 2010-02-25 05:44:13