zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    SQL性能优化:如何定位网络性能问题
    ORACLE 10升级到10.2.0.5 Patch Set遇到的内核参数检测失败问题
    Linux 僵尸进程查杀
    Linux 虚拟机网络适配器从E1000改为VMXNET3
    v$session中server为none与shared值解析
    SQL SERVER导出特殊格式的平面文件
    XtraBackup出现 Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    CentOS 6.6安装Xtrabackup RPM提示缺少libev.so.4()
    SQL Server Replication 中关于视图的点滴
    ORA-00988: missing or invalid password(s)
  • 原文地址:https://www.cnblogs.com/xiaolifeidao/p/2879523.html
Copyright © 2011-2022 走看看