【发布时间】:2010-01-22 23:19:59
【问题描述】:
尝试在我的用户配置文件中的 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; }
}
....
更新:已修复
我能够通过以下方式解决此问题:
首先这里有一个很好的资源:@987654321@
我将个人资料条目更改为:
<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) 使用包含列表而不是配置文件中的列表的类。
【问题讨论】: