zoukankan      html  css  js  c++  java
  • 属性" ******** "的代码生成失败.错误是:"程序集"********.Version=1.0.0.0,Culture=neutral,..........无标记为序列化""](转)

    开发时在做UserControl,需要注意的List<>集合问题~~~!

    其他类型的集合可能也存在这样的问题,但是我没去测试,在写集合的时候一般List<>用的多点,所以经常碰到以下错误:

    提示:属性" ******** "的代码生成失败.错误是:"程序集"********.Version=1.0.0.0,Culture=neutral,..........无标记为序列化""]

    例如下面一个MyUserControl,其中写了一个List<>属性

    [csharp] view plain copy
     
    1. public partial class MyUserControl : UserControl  
    2.  {  
    3.     public MyUserControl()  
    4.    {  
    5.      InitializeComponent();  
    6.      m_ReceiverList = new List<DuxUser>();  
    7.    }  
    8.   
    9.     public MyUserControl(List<DuxUser> receiverlist)  
    10.    {  
    11.      InitializeComponent();  
    12.      m_ReceiverList = receiverlist;  
    13.    }  
    14.  
    15.    #region Properties  
    16.   
    17.    private List<DuxUser> m_ReceiverList=null;  
    18.    public List<DuxUser> ReceiverList  
    19.    {  
    20.      get { return m_ReceiverList; }  
    21.      set  
    22.      {  
    23.        m_ReceiverList = value;  
    24.      }  
    25.    }  
    26.    #endregion  
    27.  }  
    28.   
    29.  public class DuxUser     //定义的一个DuxUser类  
    30.  {  
    31.    public DuxUser() { }  
    32.  }  


    这个MyUserControl代码看起来时没有任何问题的,但是只要你往窗体上一拖就是报上面红色字体的错误,如果你是写代码添加到窗体上是不会出错的,只要拖到窗体上去就会报错!

    为什么会这样呢?

    例如: 把一个MyUserControl控件拖到一个Form1上,那么Form1.Designer.cs里就会出现这么一条代码:

    this.myUserControl1.ReceiverList = 

    ((System.Collections.Generic.List<DuxUser>)(resources.GetObject("myUserControl1.ReceiverList")));

    这段代码就是错误的根源,因为DuxUser类没有标记为可序列化 [Serializable],所以List<DuxUser>也就不能序列化啦!

    为什么Form1.Designer.cs中会有那么一段代码呢,原因在MyUserControl的无参数构造函数上:

    m_ReceiverList = new List<DuxUser>();

    我们在做集合的时候,一般都会给他实例化一下,这样可以避免调用控件的集合Add() 或者 Remove,foreach 等操作的时候出现Null值异常!

    但是就是这段代码,Form1.Designer.cs文件中自动生成了那么一段怪代码,导致出错

    解决的办法有3种:

    1. 无参数构造方法中 m_ReceiverList=null 或者不写; 然后再Load事件中进行初始化),那么在Form1.Designer.cs中看到的就是this.ReceiverList = null;

        需要注意的是:Load事件中要判断集合是否为null值,是null才去初始化,因为有可能是手动写代码添加到容器(如:窗体),而不是拖,写代码的方式有可能在Load之前给集合属性赋值

    2. 把DuxUser类,标记为可序列化的类[Serializable]

    [csharp] view plain copy
     
    1. [Serializable]  
    2. public class DuxUser  
    3. {  
    4.   public DuxUser() { }  
    5.     
    6.   //.........  
    7. }  

    3. 如下:

    [csharp] view plain copy
     
    1. private List<DuxUser> m_ReceiverList=null;  
    2.   
    3. [Bindable(false), Browsable(false)]  
    4. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]  
    5. public List<DuxUser> ReceiverList  
    6. {  
    7.   get { return m_ReceiverList; }  
    8.   set  
    9.   {  
    10.     m_ReceiverList = value;  
    11.   }  
    12. }  

    想看到下面这段代码,请选择第二种方法(把类[DuxUser]标记为可序列化):

    this.myUserControl1.ReceiverList = ((System.Collections.Generic.List<DuxUser>)(resources.GetObject("myUserControl1.ReceiverList")));

    第一:写在这里是为了做笔记..(好记性不如烂笔头)

    第二:愿有缘人找到此代码,以免出来问题束手无策.....

    在使用编写完成的用户控件时,有时会现理某某属性代码生成失败,程序集未标记为可序列化,解决方法参考另一位博主写的很好的

    点击打开链接

    我按照上面做还是没能解决问题,然后我想了一下,还要做如下工作

    1、清理项目

    2、重新添加项目间引用(如果需要)

    3、删除该用户控件所在项目的bin和obj目录

    4、关闭VS,重新生成

    大功告成!

    非常感谢 点击打开链接

    转:http://blog.csdn.net/blogtjf/article/details/47098689

    转:http://blog.csdn.net/wxm3630478/article/details/4295122

  • 相关阅读:
    Java动态代理设计模式
    AOP的相关概念
    如何解决表单提交的中文乱码问题
    怎么防止重复提交
    http的响应码200,404,302,500表示的含义分别是?
    JSP三大指令是什么?
    说一下 session 的工作原理?
    session 和 cookie 有什么区别?
    说一下 JSP 的 4 种作用域?
    jsp有哪些内置对象?作用分别是什么?
  • 原文地址:https://www.cnblogs.com/janeaiai/p/8144747.html
Copyright © 2011-2022 走看看