2010-01-22 96 views
0

試圖挽救我的用戶配置文件中的我的ArrayList中的自定義類的時候,我發現了以下錯誤的用戶配置文件內:自定義類型在C#

時出錯生成XML文檔。 ---> System.InvalidOperationException:類型Com.xxx.MyDataClass不是預期的。使用XmlInclude或SoapInclude屬性指定靜態未知的類型。

我的web.config有類似:

<profile enabled="true" automaticSaveEnabled="false" defaultProvider="xxxxxxProvider"> 
    <properties> 
    <add name="MyData" type="System.Collections.ArrayList"/> 
    </properties> 
</profile> 

我想我的類調用(像)MyDataClass存儲在一個ArrayList到MyData的。 當我保存我得到上述錯誤。 MyDataClass類現在只有兩個成員,都設置爲'string'。

我假設我必須告訴班級必須序列化自己,但我不知道如何。

這裏的類:

namespace Com.xxxx.DataClasses 
{ 
    public class MyDataClass : ISerializable 
    { 
     public string elem1; 
     public string elem2; 

     public string Elem1 
     { 
      get { return elem1; } 
      set { elem1 = value; } 
     } 

     public string Elem2 
     { 
      get { return elem2; } 
      set { elem2 = value; } 
     } 
.... 

更新:修正

我能夠通過以下來解決這個問題:

的一切都在這裏首先是一個很好的資源:http://msdn.microsoft.com/en-us/library/d8b58y5d.aspx

我更改了個人資料條目:

<profile enabled="true" automaticSaveEnabled="false" defaultProvider="xxxxxxProvider"> 
    <properties> 
    <add name="MyData" type="mypackage.MyDataClass" serializeAs="binary"/> 
    </properties> 
</profile> 

,然後我創建MyDataClass包含一個列表<> MyDataClassInfo的對象類似於:使用serializeAt =「二進制」和2)使用一個類

namespace Com.xxxx.DataClasses 
{ 
    [Serializable] 
    public class MyDataClass 
    { 
     List<MyDataClassInfo> myDataClassInfo; 

     public MyDataClassInfo() 
     { 
      myDataClassInfo = new List<MyDataClassInfo>; 
     } 
     public List<MyDataClassInfo> MyDataClassInfo 
     { 
      get; 
      set; 
     } 
    } 


    [Serializable] 
    public class MyDataClassInfo 
    { 
     public string elem1; 
     public string elem2; 

     public string Elem1 
     { 
      get { return elem1; } 
      set { elem1 = value; } 
     } 

     public string Elem2 
     { 
      get { return elem2; } 
      set { elem2 = value; } 
     } 
.... 

這裏的關鍵是1),其包含一個列表,而不是配置文件中的列表。

回答

0

你不應該使用ArrayList類。它從.NET 2.0開始已被棄用。

改爲使用List<MyDataClass>。它甚至可能爲你解決這個問題。

+0

它不喜歡我在web.config中指定它時:」/>。 web.config中的正確語法是什麼? – 2010-01-23 05:08:29

0

嘗試使用SerializableAttribute裝飾MyDataClass。

namespace Com.xxxx.DataClasses 
{ 
    [Serializable] 
    public class MyDataClass 
    { 
     public string elem1; 
     public string elem2; 

     public string Elem1 
     { 
      get { return elem1; } 
      set { elem1 = value; } 
     } 

     public string Elem2 
     { 
      get { return elem2; } 
      set { elem2 = value; } 
     } 
    .... 
+0

這不適合我。同樣的錯誤。 – 2010-01-23 05:10:56