繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM