自已编写的组件 ,在winForm引用后, 给一个公共属性,赋值List<FieldEntity>后, 保存再打开就显示如下信息. 
无法加载进行反序列化所需的类型 System.Collections.Generic.List`1[[QGrid.QGrid+FieldEntity, QGrid, Version=1.0.0.3, Culture=neutral, PublicKeyToken=null]]。 QGrid
以下是引用类型的代码        [Serializable]
        public class FieldEntity : ISerializable 
        {
            private string _fieldname;
            private string _fieldvalue;
            private Boolean selected;            public FieldEntity(){}            protected FieldEntity(SerializationInfo info, StreamingContext context)
          {
              this._fieldname = info.GetString("FieldName");
              this._fieldvalue = info.GetString("FieldValue");
              this.selected = info.GetBoolean("Selected");
          
          }
            public FieldEntity(string fieldname, Boolean selected)
            {
                this.FieldName = fieldname;
                this.Selected = selected;
                this.FieldValue = "";
            }            public FieldEntity(string fieldname,string fieldvalue, Boolean selected)
            {
                this.FieldName = fieldname;
                this.Selected = selected;
                this.FieldValue = fieldname;
            }
            public string FieldName
            {
                set { _fieldname = value; }
                get { return _fieldname; }
            }            public string FieldValue
            {
                set { _fieldvalue = value; }
                get { return _fieldvalue; }
            }            public Boolean Selected
            {
                set { selected = value; }
                get { return selected; }
            }            #region ISerializable 成员            void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
            {
                info.AddValue("FieldName", this.FieldName);
                info.AddValue("FieldValue", this.FieldValue);
                info.AddValue("Selected", this.selected);
            }            #endregion
        }

解决方案 »

  1.   

    都在同一项目,所有不存在程序集的问题. 关键是 "无法加载进行反序列化所需的类型 " 这个类型就是FieldEntity的一个LIST. 我在设计界面赋值后, 查看resx文件,发现值,是空的. 那么就是说明序列化没有成功. 是不是单个FieldEntity是可以的, List<fieldEntity>就不行了. 
      

  2.   

     System.Collections.Generic.List`1[[
    List <FieldEntity>
    泛型不支持序列化的?你这样用不行
    [serializable]
    public FieldEntityList:List<FieldEntity>
    {
    }
    这样用FieldEntityList来操作
      

  3.   

     给一个公共属性,赋值List <FieldEntity>这种操作尽量在if(!DesignMode)
                {
                    // 给一个公共属性,赋值List <FieldEntity>
                }
    中进行
      

  4.   

    楼上说的不对list<>支持序列化,你在同一个函数内序列化和反序列化,看成不成成功,ps:贴出你的序列化和反序列化的代码
      

  5.   

    序列化和反序列化是windows自己处理,后生成在resx文件我是做的一个组件设计.QGrid 中有一个DisableColumnList 的属性. 在设计界面时,点击这项, 会弹出一个FORM(ColumnSelectEditorForm), ColumnSelectEditorForm操作后会返回一个LIST<FieldEntity>. Windows会自动把数据保存到xxx.resx. 我能看到数据如下
            AAEAAAD/////AQAAAAAAAAAMAgAAADxRR3JpZCwgVmVyc2lvbj0xLjAuMC4zLCBDdWx0dXJlPW5ldXRy
           
    在xxx这个form的Desinger.cs中this.qGrid1.DisableColumnList = ((System.Collections.Generic.List<QGrid.QGrid.FieldEntity>)(resources.GetObject("qGrid1.DisableColumnList")));是能过这个来读取. 
    我在调试是,能读到this.qGrid1.DisableColumnList , 它的值是有的, 而且和我当时操作保存的结果是一致的.是不是resources.GetObject("qGrid1.DisableColumnList")有问题?
      

  6.   

    我的QGrid里有以下属性:        private List<FieldEntity> disableColumn = new List<FieldEntity>();
            private List<FieldEntity> invisibleColumn = new List<FieldEntity>();        /// <summary>
            /// 禁用列
            /// </summary>
            [Description("禁用的列"), Editor(typeof(FaceEditor), typeof(UITypeEditor))]
            public List<FieldEntity> DisableColumnList
            {
                set { this.disableColumn = value; }
                get { return this.disableColumn; }
         
            }
            /// <summary>
            /// 可显列
            /// </summary>
            [Description("不需显示的列"), Editor(typeof(FaceEditor), typeof(UITypeEditor))]
            public List<FieldEntity> InvisibleColumnList
            {
                    set { this.invisibleColumn = value; }
                  get { return this.invisibleColumn; }
          
            }
    现在发现, 在设计时候,如果重新编译Qgrid, 那么引用它的Form,打开时,会显示. 
    类型“QGrid.QGrid+FieldEntity[]”的对象无法转换为类型“QGrid.QGrid+FieldEntity[]”。 
    既然是同一个对象,为什么还会无法转换呢. 现在只要关闭,再重新打开VS2008, 双击form,就会正常显示,点击DisableColumnList属性会显示FaceEditor(列Fieldentity).双击resx文件里会出现qGrid1.DisableColumnList System.Collections.Generic.List`1[[QGrid.QGrid+FieldEntity (无法显示值)这是正确的.因为是一个list<FieldEntity>对象,当然(无法显示值).如果只是关闭解决方案, 重新打开.那么resx文件里是
    qGrid1.DisableColumnList null null那么为什么我只要一编译组件,就会生成qGrid1.DisableColumnList null null这样呢, 查看resx源代码, 是二进制码啊.<data name="qGrid1.InvisibleColumnList" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>
            AAEAAAD/////AQAAAAAAAAAMAgAAADxRR3JpZCw
    </value>
      </data>
    综上,难道是bug?!整整困扰了我二天, 今天早上打项目时,突然发现好了, 然后重新编译又出问题 ,找了一天,总以为是序列和反序列的问题,甚至想放弃使用对象List<FieldEntity>改用string来解决,但又不甘. 后来想想,既然找到对象,说明是序列是没有问题. 一开始(无法加载进行反序列化所需的类型 ) 与这也有关系.
      

  7.   

    类型“QGrid.QGrid+FieldEntity[]”的对象无法转换为类型“QGrid.QGrid+FieldEntity[]”。      如果不想在,设计时,实例化组件自动成属性.
    需要在属性上加如下代码.
       [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
      

  8.   

    楼主可以看下:里面有解决方案
    http://stackoverflow.com/questions/2568623/when-i-renamed-a-class-i-am-getting-a-deserialization-error-how-to-fix-it