代码之家  ›  专栏  ›  技术社区  ›  Arthur Frankel

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

  •  0
  • Arthur Frankel  · 技术社区  · 15 年前

    生成XML文档时出错。--->System.InvalidOperationException:类型Com.xxx.MyDataClass没有预料到。使用xmlclude或SoapInclude属性指定静态未知的类型。

    <profile enabled="true" automaticSaveEnabled="false" defaultProvider="xxxxxxProvider">
      <properties>
        <add name="MyData" type="System.Collections.ArrayList"/>
      </properties>
    </profile>
    

    像myarraylist这样的数据存储在myarraylist类中。 MyDataClass类目前只有两个成员,都设置为“string”。

    我想我必须告诉类必须序列化自己,但我不确定如何序列化。

    课程如下:

    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对象的列表,类似于:

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

    2 回复  |  直到 15 年前
        1
  •  0
  •   John Saunders    15 年前

    你不应该使用 ArrayList 班级。从.NET 2.0开始,它已被弃用。

    使用 List<MyDataClass>

        2
  •  0
  •   G-Wiz RameshVel    15 年前

    尝试用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; }
            }
        ....
    
    推荐文章