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
        }

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

  • 相关阅读:
    利用JS实现的根据经纬度计算地球上两点之间的距离
    html中meta标签作用详解
    Jquery Highcharts 参数配置说明
    Properties类的使用示例
    利用数据库模版创建方便部署的.Net项目调试环境
    ASP.NET修改Web.Config文件(对xml的操作)
    创建动态数据输入用户界面
    DataGrid相关知识总结(收集自各位老大处)
    在C#.net中如何操作XML
    C#中使用反射的性能分析
  • 原文地址:https://www.cnblogs.com/leleroyn/p/1315084.html
Copyright © 2011-2022 走看看