【问题标题】:Custom Type within ArrayList inside of the user profile in C#C# 中用户配置文件内的 ArrayList 中的自定义类型
【发布时间】: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) 使用包含列表而不是配置文件中的列表的类。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您永远不应该使用ArrayList 类。自 .NET 2.0 起已弃用。

    请改用List&lt;MyDataClass&gt;。它甚至可以为您解决这个问题。

    【讨论】:

    • 当我在 web.config 中指定它时不喜欢:。 web.config 中的正确语法是什么?
    【解决方案2】:

    尝试用 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; }
            }
        ....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多