• 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
        }

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

  • 相关阅读:
    Python基础
    XML文件的基础使用
    正则表达式的基本使用
    hafs的java_api(转载)
    HDFS常用的Shell命令(转载)
    安装hadoop2.4.1
    配置JDK环境变量
    准备Linux环境
    Winform窗体屏蔽Alt+F4强制关闭
    leetcode 0214
  • 原文地址:https://www.cnblogs.com/leleroyn/p/1315084.html
Copyright © 2020-2023  润新知