[英]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.