好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C# 序列化与反序列化几种格式的转换

C# 序列化与反序列化几种格式的转换

这里介绍了几种方式之间的序列化与反序列化之间的转换

首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象;

第一种将object转换为string对象,这种比较简单没有什么可谈的;

  public   string  ScriptSerialize<T> (T t)
        {
            JavaScriptSerializer serializer  =  new   JavaScriptSerializer();
              return   serializer.Serialize(t);
        } 


第二种将object转换为xml对象:

  public   string  ScriptSerializeToXML<T> (T t)
        {
            XmlSerializer serializer  =  new  XmlSerializer( typeof  (T));
            MemoryStream mem  =  new   MemoryStream();
            XmlTextWriter writer  =  new   XmlTextWriter(mem,Encoding.UTF8);
            XmlSerializerNamespaces ns  =  new   XmlSerializerNamespaces();
            ns.Add(  "" , ""  );
            serializer.Serialize(writer,t,ns);
            writer.Close();
              return   Encoding.UTF8.GetString(mem.ToArray());
        } 

下面我主要讲string对象反序列化为对应的对象;

一、将string对象反序列化为object对象

  public  T ScriptDeserialize<T>( string   strJson)
        {
            JavaScriptSerializer serializer  =  new   JavaScriptSerializer();
              return  serializer.Deserialize<T> (strJson);
        } 

二、将string对象反序列化为list对象

  public  List<T> JSONStringToList<T>( string   strJson)
        {
            JavaScriptSerializer serializer  =  new   JavaScriptSerializer();
            List <T> objList = serializer.Deserialize<List<T>> (strJson);
              return   objList;
        } 

三、将string对象反序列化为datatable对象

   public  DataTable JSONStringToDataTable<T>( string   strJson)
        {
            DataTable dt  =  new   DataTable();
              if  (strJson.IndexOf( "  [  " ) > - 1 ) //  如果大于则strJson存放了多个model对象 
             {
                strJson  = strJson.Remove(strJson.Length -  1 ,  1 ).Remove( 0 ,  1 ).Replace( "  },{  " ,  "  };{  "  );
            }
            JavaScriptSerializer serializer  =  new   JavaScriptSerializer();
              string [] items = strJson.Split( '  ;  '  );

              foreach  (PropertyInfo property  in   typeof (T).GetProperties()) //  通过反射获得T类型的所有属性 
             {
                DataColumn col  =  new   DataColumn(property.Name,property.PropertyType);
                dt.Columns.Add(col);
            }
              //  循环 一个一个的反序列化 
             for  ( int  i =  0 ; i < items.Length; i++ )
            {
                DataRow dr  =  dt.NewRow();
                  //  反序列化为一个T类型对象 
                T temp = serializer.Deserialize<T> (items[i]);
                  foreach  (PropertyInfo property  in   typeof  (T).GetProperties())
                {
                    dr[property.Name]  = property.GetValue(temp, null  );
                }
                dt.Rows.Add(dr);
            }
              return   dt;
        } 

四、将xml对象反序列化为object对象

  public  T JSONXMLToObject<T>( string   strJson)
        {
            XmlDocument xdoc  =  new   XmlDocument();
              try  
            {
                xdoc.LoadXml(strJson);
                XmlNodeReader reader  =  new   XmlNodeReader(xdoc.DocumentElement);
                XmlSerializer ser  =  new  XmlSerializer( typeof  (T));
                  object  obj =  ser.Deserialize(reader);
                  return   (T)obj;
            }
              catch  
            {
                  return   default  (T);
            }
        } 

现在用具体的实例来如何调用他们呢?特别要注意的是将xml对象反序列化objcet对象

  public   class   LoginObject
    {
            public   string  Account {  get ;  set  ;}
            public   string  Password {  get ;  set  ;}
     } 

  1   LoginObject loginObject =  new  LoginObject { Account = account, Password =  password };
   2              ExTools.Manage.Class.CScriptSerialize Serialize =  new   Class.CScriptSerialize();
   3               //  将object对象转换为string 
  4                string  strJson= Serialize.ScriptSerialize(loginObject);
   5            
  6               //  将object对象转换为xml对象 
  7               string  strJson =  Serialize.ScriptSerializeToXML(loginObject);
   8             
  9  
 10               //  转换为list对象 
 11               List<LoginObject> list = Serialize.JSONStringToList<LoginObject> (strJson);
  12               //  将一个xml对象转换为object对象 
 13             strJson = strJson.Substring( 1 , strJson.Length -  1  );
  14              loginObject = Serialize.JSONXMLToObject<LoginObject> (strJson);
  15               //  将字符串转换为dataTable 
 16              DataTable dt = Serialize.JSONStringToDataTable<LoginObject> (strJson);
  17               //  将字符串转换为object对象 
 18              loginObject = Serialize.ScriptDeserialize<LoginObject>(strJson);

不积跬步,无以至千里!

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于C# 序列化与反序列化几种格式的转换的详细内容...

  阅读:50次