zoukankan      html  css  js  c++  java
  • linq 实体类与viewstate、cache(一个序列化与反序列化的问题)

    根据MSDN的说明linq实体类只支持 DataContractAttribute 属性的序列化操作,也就是说他不支持XML与bin形式的序列化操作,这样就给我们在使用上带来了储多不便,

    比如有一个"Student"的linq实体类,当我们对它进行下面的操作是会发生错误:

    Student student = new Student(id=001, name="Ants", grade ="一年级");

    viewstate["v"] = student; 或者 Page.Cache["p"]=student时都会发生一个提示Student 类型不能被序列化的错误。

    对于这类问题我们怎么处理呢?原以为在Student类上加要[DataContract]就好了,结果还是不行。

    那我们到底解决这个问题呢。想了好久,居然它提示的是不能被序列化,那我们就从底层来做,也就是自己动手实现这个类的序列化。

    首先,我们让这个类实现System.Runtime.Serialization.ISerializable接口;

    然后再给这个类添加[Serializable]特性;

    最终代码如下:

     [Serializable]
        
    public partial class Student: System.Runtime.Serialization.ISerializable
        {
            
    public T_helpCategory(SerializationInfo info, StreamingContext context)
            {   
                
    this.id=(int) info.GetValue("id"typeof(int));
                
    this.name= info.GetValue("name"typeof(String)) as string;
                
    this.grade= info.GetValue("grade",typeof(String)) as string;
            }
            
    #region ISerializable 成员

            
    public void GetObjectData(SerializationInfo info, StreamingContext context)
            {           
                info.AddValue(
    "id"this.id);
                info.AddValue(
    "name"this.name);
                info.AddValue(
    "grade"this.grade);
            }

            
    #endregion
        }

    经过这样的处理后,最前面的那段示例代码就不会出错啦。当然结果也是正确的。

  • 相关阅读:
    QLPreviewController来预览文件
    Camera360SDK
    实现 JSON + Jquery+.Net ajax功能
    showModalDialog传值
    web方式AJAX调用
    CRM4.0多个实体关联查询
    用javascript 动态添加部门和人员
    GridView中使用超连接
    根据订单号查询出订单附属实体
    sql 常用聚合函数
  • 原文地址:https://www.cnblogs.com/leleroyn/p/1315084.html
Copyright © 2011-2022 走看看