zoukankan      html  css  js  c++  java
  • 单向序列化

    今天遇到一个问题就是DataGridViewCellStyle这个类型,我们想对其进行序列化。但是遗憾的是,该类型并没有声明为可序列化。所以,不管我们用哪一个序列化器,都会报告错误。似乎这是一个不可能解决的问题。

    经过研究,在.NET 2.0中确实比较难做到,但可以通过.NET 3.0的一个DataContractSerializer来实现。该序列化器是专门为WCF设计的,是XML序列化器的一种。

    http://msdn.microsoft.com/zh-cn/vstudio/system.runtime.serialization.datacontractserializer.aspx

    下面是一个例子:

    创建一个windows Forms程序,选择.NET Framework 为3.0,并要添加System.Runtime.Serialization程序集的引用。

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.Runtime.Serialization;
    using System.IO;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            /// <summary>
            /// 序列化
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Serialize_Click(object sender, EventArgs e)
            {
                //因为DataGridViewCellStyle的属性有一些特殊类型,所以要预先注册
                List<Type> types = new List<Type>();
                types.Add(typeof(DBNull));
                types.Add(typeof(System.Globalization.CultureInfo));
    
    
                DataContractSerializer x = new 
                    DataContractSerializer(typeof(DataGridViewCellStyle), types);
                DataGridViewCellStyle style = new DataGridViewCellStyle();
                style.BackColor = System.Drawing.Color.Red;
    
                FileStream fs = new FileStream("temp.xml", FileMode.Create);
                x.WriteObject(fs, style);
                fs.Close();
    
            }
    
            /// <summary>
            /// 反序列化
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void DeSerialize_Click(object sender, EventArgs e)
            {
                List<Type> types = new List<Type>();
                types.Add(typeof(DBNull));
                types.Add(typeof(System.Globalization.CultureInfo));
    
    
                DataContractSerializer x = new 
                    DataContractSerializer(typeof(DataGridViewCellStyle), types);
                FileStream fs = new FileStream("temp.xml", FileMode.Open);
                DataGridViewCellStyle style = (DataGridViewCellStyle)x.ReadObject(fs);
                fs.Close();
                MessageBox.Show(style.BackColor.ToString());
    
            }
        }
    }
    image 
    再深入地看,我们可以用NetDataContractSerializer来实现同样的目的
    http://msdn.microsoft.com/zh-cn/vstudio/system.runtime.serialization.netdatacontractserializer.aspx
    序列化
    DataGridViewCellStyle style = new DataGridViewCellStyle();
    style.BackColor = System.Drawing.Color.Red; 
    
    FileStream fs = new FileStream("temp.xml", FileMode.Create);
    NetDataContractSerializer x = new NetDataContractSerializer();
    x.Serialize(fs, style);
    fs.Close();
    
    反序列化
    FileStream fs = new FileStream("temp.xml", FileMode.Open);
    NetDataContractSerializer x = new NetDataContractSerializer();
    DataGridViewCellStyle style = (DataGridViewCellStyle)x.Deserialize(fs);
    fs.Close();
    MessageBox.Show(style.BackColor.ToString());
  • 相关阅读:
    DMALL刘江峰:生鲜市场具有巨大O2O改造空间
    互联网产品经理能力体系
    Review Board——在线代码审查工具
    Java Dns Cache Manipulator
    Keepalived 双机web服务宕机检测切换系统软件
    weblogic性能调优参考
    spring的ResultSetWrappingSqlRowSet使用rs.getTimestamp取oracle数据库时分秒问题
    oracle ORA-01747(系统保留关键字)user.table.column, table.column 或列说明无效 hibernate映射oracle保留关键字
    javascript模块化编程(AMD规范的加载器)
    oracle定时运行 存储过程
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1286345.html
Copyright © 2011-2022 走看看