Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ArrayList中的自定义类型在C中用户配置文件的内部#_C#_Asp.net - Fatal编程技术网

C# ArrayList中的自定义类型在C中用户配置文件的内部#

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

尝试在用户配置文件中的ArrayList中保存自定义类时,出现以下错误:

生成XML文档时出错。-->System.InvalidOperationException:不应为Com.xxx.MyDataClass类型。使用XmlInclude或SoapInclude属性指定静态未知的类型

My web.config有如下功能:

<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; }
        }
    ....