zoukankan      html  css  js  c++  java
  • 序列化中的[NonSerialized]字段 转

    我们知道我们可以添加Serializable属性来序列化和反序列化对象。它通常用来储存、传输对象。例如

    复制代码
    [Serializable]
    class ShoppingCartItem
    {
    public int productId;
    public decimal price;
    public int quantity;
    public decimal total;
    public ShoppingCartItem(int _productID, decimal _price, int _quantity)
    {
    productId = _productID;
    price = _price;
    quantity = _quantity;
    total = price * quantity;
    }
    }
    复制代码

    但是有时候,我们并不需要序列化所有的成员(经常动不动序列化所有的有点浪费存储空间和增加传输压力). 所以我们可以用

    [NonSerialized]来标识属性、方法等。例如

    复制代码
    [Serializable]
    class ShoppingCartItem
    {
    public int productId;
    public decimal price;
    public int quantity;
    [NonSerialized]
    public decimal total;
    public ShoppingCartItem(int _productID, decimal _price, int _quantity)
    {
    productId = _productID;
    price = _price;
    quantity = _quantity;
    total = price * quantity;
    }
    }
    复制代码

    如果是这样的话, total 将不会被序列化,当然在反序列化过程中也不会被初始化,但是假如我们要在反序列化对象中得到total的结果怎么办呢?那我们就需要

    IDeserializationCallback接口并实现IDeserializationCallback.OnDeserialization方法。例如

    复制代码
    class ShoppingCartItem : IDeserializationCallback {
    public int productId;
    public decimal price;
    public int quantity;
    [NonSerialized] public decimal total;
    public ShoppingCartItem(int _productID, decimal _price, int _quantity)
    {
    productId = _productID;
    price = _price;
    quantity = _quantity;
    total = price * quantity;
    }
    void IDeserializationCallback.OnDeserialization(Object sender)
    {
    // After deserialization, calculate the total
    total = price * quantity;
    }
    }
    复制代码
  • 相关阅读:
    asp.net 上传文件 显示进度条
    .net 无刷新的几种模式的开发
    使用ASP.NET 2.0提供的WebResource管理资源
    sqlserver2005 递归查询
    利用触发器对某个表的操作过程(删除、修改、插入)
    Sqlserver 先分页再查询
    关于左右滚动,控制某几列不动
    几个不错的SQl语句
    怎样用.net读出Excel的多个Sheet
    将DELPHI数据库连接写进INI配置文件中
  • 原文地址:https://www.cnblogs.com/wupeiqi/p/2770922.html
Copyright © 2011-2022 走看看