C# ArrayList中的自定义类型在C中用户配置文件的内部#
尝试在用户配置文件中的ArrayList中保存自定义类时,出现以下错误: 生成XML文档时出错。-->System.InvalidOperationException:不应为Com.xxx.MyDataClass类型。使用XmlInclude或SoapInclude属性指定静态未知的类型 My web.config有如下功能:C# ArrayList中的自定义类型在C中用户配置文件的内部#,c#,asp.net,C#,Asp.net,尝试在用户配置文件中的ArrayList中保存自定义类时,出现以下错误: 生成XML文档时出错。-->System.InvalidOperationException:不应为Com.xxx.MyDataClass类型。使用XmlInclude或SoapInclude属性指定静态未知的类型 My web.config有如下功能: <profile enabled="true" automaticSaveEnabled="false" defaultProvider="xxxxxxProvid
<profile enabled="true" automaticSaveEnabled="false" defaultProvider="xxxxxxProvider">
<properties>
<add name="MyData" type="System.Collections.ArrayList"/>
</properties>
</profile>
更新:已修复
我可以通过以下方式解决此问题:
首先,这里有一个很好的资源:
我将配置文件条目更改为:
<profile enabled="true" automaticSaveEnabled="false" defaultProvider="xxxxxxProvider">
<properties>
<add name="MyData" type="mypackage.MyDataClass" serializeAs="binary"/>
</properties>
</profile>
然后我创建了MyDataClass以包含MyDataClassInfo对象的列表,类似于:
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; }
}
....
namespace Com.xxxx.DataClasses
{
[可序列化]
公共类MyDataClass
{
列出myDataClassInfo;
公共MyDataClassInfo()
{
myDataClassInfo=新列表;
}
公共列表MyDataClassInfo
{
收到
设置
}
}
[可序列化]
公共类MyDataClassInfo
{
公共字符串elem1;
公共字符串elem2;
公共字符串Elem1
{
获取{return elem1;}
设置{elem1=value;}
}
公共字符串Elem2
{
获取{return elem2;}
设置{elem2=value;}
}
....
这里的关键是1)使用serializeAt=“binary”和2)使用包含列表的类,而不是配置文件中的列表。您永远不应该使用
ArrayList
类。从.NET 2.0开始,它就被弃用了
使用
List
。它甚至可以为您解决此问题。尝试使用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; }
}
....
它不像我在web.config中指定的那样:。web.config中的正确语法是什么?
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; }
}
....