[英]Custom Type within ArrayList inside of the user profile in C#
嘗試在用戶配置文件中的ArrayList中保存自定義類時出現以下錯誤:
生成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類目前只有兩個成員,都設置為“字符串”。
我假設我必須告訴類必須序列化自己,但是我不確定如何進行序列化。
這是課程:
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對象的List <>:
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)使用serializeAt =“ binary”和2)使用包含列表而不是配置文件中列表的類。
您永遠不要使用ArrayList
類。 從.NET 2.0開始不推薦使用。
使用List<MyDataClass>
代替。 它甚至可以為您解決此問題。
嘗試用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; }
}
....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.