試圖挽救我的用戶配置文件中的我的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),其包含一個列表,而不是配置文件中的列表。
它不喜歡我在web.config中指定它時:」/>。 web.config中的正確語法是什麼? –
2010-01-23 05:08:29