• .NET中的序列化与反序列化的问题


        前段时间,有朋友问我关于序列化的问题,当时写了个列子给他,也算是完成了需求,但事后觉得还是有必要整理一下序列化方面的东西,以便理解和运用.

         简单的概述序列化和反序列化就是:把对象转换为字节序列的过程就是序列化;把字节序列恢复为一个对象的过程就是反序列化.序列化的作用主要有两点,第一就是用于将对象写入硬盘来保存数据,第二就是用来在网络中传输数据.

         以下是我关于序列化写的一些实例方法,主要是对象的序列化与反序列化问题.

        

    序列化
    1 /// <summary>
    2 /// create by 鄂溪子 on 2011-05-17
    3 /// </summary>
    4 public class SerializableCs
    5 {
    6 /// <summary>
    7 /// 将类序列化为一个文件
    8 /// </summary>
    9 public void SerizlizableFile<T>(T obj)
    10 {
    11 IFormatter formatter = new BinaryFormatter();
    12 Stream stream = new FileStream(@"c:\t.xml", FileMode.Create,FileAccess.Write, FileShare.None);
    13 formatter.Serialize(stream, obj);
    14 stream.Close();
    15 }
    16
    17 /// <summary>
    18 /// 将一个类文件反序列化
    19 /// </summary>
    20 public T DeserializeFile<T>(T obj)
    21 {
    22 IFormatter formatter = new BinaryFormatter();
    23 Stream stream = new FileStream(@"c:\t.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
    24 obj = (T)formatter.Deserialize(stream);
    25 stream.Close();
    26
    27 return obj;
    28 }
    29
    30 /// <summary>
    31 /// 对象序列化为xml
    32 /// </summary>
    33 /// <typeparam name="T">需要序列化的对象类型</typeparam>
    34 /// <param name="obj">将要序列化的对象,包括list集合</param>
    35 /// <returns></returns>
    36 public string ObjToXml<T>(T obj)
    37 {
    38 string resultstr = string.Empty;
    39
    40 if (obj != null)
    41 {
    42 try
    43 {
    44 using (StringWriter sw = new StringWriter())
    45 {
    46 XmlSerializer xz = new XmlSerializer(obj.GetType());
    47 xz.Serialize(sw, obj);
    48 resultstr = sw.ToString();
    49 }
    50 }
    51 catch (Exception)
    52 {
    53 }
    54
    55 }
    56 return resultstr;
    57 }
    58
    59 /// <summary>
    60 /// xml序列化为对象
    61 /// </summary>
    62 /// <typeparam name="T">对象类型</typeparam>
    63 /// <param name="strxml">xml</param>
    64 /// <returns>对象</returns>
    65 public T XmlToObject<T>(string strxml)
    66 {
    67 if (strxml != null && strxml != string.Empty)
    68 {
    69 try
    70 {
    71 using (StringReader sr = new StringReader(strxml))
    72 {
    73 XmlSerializer xz = new XmlSerializer(typeof(T));
    74 return ((T)xz.Deserialize(sr));
    75 }
    76 }
    77 catch (Exception)
    78 {
    79 return default(T);
    80 }
    81
    82 }
    83 return default(T);
    84
    85 //该方法也可以将xml序列化为对象,但不能序列化为list集合
    86 //using (MemoryStream stream = new MemoryStream())
    87 //{
    88 // using (StreamWriter sw = new StreamWriter(stream, Encoding.UTF8))
    89 // {
    90 // sw.Write(strxml);
    91 // sw.Flush();
    92 // stream.Seek(0, SeekOrigin.Begin);
    93 // XmlSerializer serializer = new XmlSerializer(typeof(T));
    94 // try
    95 // {
    96 // return ((T)serializer.Deserialize(stream));
    97 // }
    98 // catch (Exception)
    99 // {
    100 // return default(T);
    101 // }
    102 // }
    103 //}
    104 }
    105
    106 /// <summary>
    107 /// 将对象或集合序列化为json
    108 /// </summary>
    109 /// <typeparam name="T"></typeparam>
    110 /// <param name="obj"></param>
    111 /// <returns></returns>
    112 public string ObjToJosn<T>(T obj)
    113 {
    114 string resultjosn = string.Empty;
    115
    116 if (obj != null)
    117 {
    118 JavaScriptSerializer jss = new JavaScriptSerializer();
    119 resultjosn = jss.Serialize(obj);
    120 }
    121
    122 return resultjosn;
    123 }
    124
    125 /// <summary>
    126 /// 将json序列化为对象或集合
    127 /// </summary>
    128 /// <typeparam name="T"></typeparam>
    129 /// <param name="josn"></param>
    130 /// <returns></returns>
    131 public T JosnToObj<T>(string josn)
    132 {
    133 if (josn != null && josn != string.Empty)
    134 {
    135 JavaScriptSerializer jss = new JavaScriptSerializer();
    136 return ((T)jss.Deserialize(josn,typeof(T)));
    137 }
    138 return default(T);
    139 }
    140 }

    以上代码,仅供参考.

     作者: 期星揽月——每天进步一点点……

     出处:http://qixing_gan.cnblogs.com/

     版权:本文版权归作者和博客园共有,欢迎转载,但必须保留作者版权,并给出原文链接,谢谢合作!

    与我在线交流

  • 相关阅读:
    web 单例 多例
    python socket客户端
    foy: 轻量级的基于 nodejs 的通用 build 工具
    Hydux: 一个 Elm-like 的 全功能的 Redux 替代品
    AlarmManager使用注意事项
    【转】android ListView 几个重要属性
    自己写的小工具软件集合
    win8.1 cygwin编译java轻量虚拟机avian
    android 图片缩放抗锯齿
    windows phone和android,ios的touch事件兼容
  • 原文地址:https://www.cnblogs.com/qixing_gan/p/2050110.html
Copyright © 2020-2023  润新知