浅谈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;} }
LoginObject loginObject = new LoginObject { Account = account, Password = password }; ExTools.Manage.Class.CScriptSerialize Serialize = new Class.CScriptSerialize(); //将object对象转换为string string strJson=Serialize.ScriptSerialize(loginObject); //将object对象转换为xml对象 string strJson = Serialize.ScriptSerializeToXML(loginObject); //转换为list对象 List<LoginObject> list = Serialize.JSONStringToList<LoginObject>(strJson); //将一个xml对象转换为object对象 strJson = strJson.Substring(1, strJson.Length - 1); loginObject = Serialize.JSONXMLToObject<LoginObject>(strJson); //将字符串转换为dataTable DataTable dt = Serialize.JSONStringToDataTable<LoginObject>(strJson); //将字符串转换为object对象 loginObject = Serialize.ScriptDeserialize<LoginObject>(strJson);
以上这篇浅谈C# 序列化与反序列化几种格式的转换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
上一篇:C#中const 和 readonly 修饰符的用法详解
栏 目:C#教程
下一篇:C#制作多线程处理强化版网络爬虫
本文标题:浅谈C# 序列化与反序列化几种格式的转换
本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/6268.html
您可能感兴趣的文章
- 01-10C#通过重写Panel改变边框颜色与宽度的方法
- 01-10C#实现实体类与字符串互相转换的方法
- 01-10C#实现子窗体与父窗体通信方法实例总结
- 01-10时间戳与时间相互转换(php .net精确到毫秒)
- 01-10基于C#实现简单离线注册码生成与验证
- 01-10C#开发中的垃圾回收机制简析
- 01-10C#编程实现对象与JSON串互相转换实例分析
- 01-10C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步
- 01-10轻松学习C#的装箱与拆箱
- 01-10C#定制Excel界面并实现与数据库交互的方法
阅读排行
本栏相关
- 01-10C#通过反射获取当前工程中所有窗体并
- 01-10关于ASP网页无法打开的解决方案
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10WinForm绘制圆角的方法
- 01-10C#实现txt定位指定行完整实例
- 01-10WinForm实现仿视频播放器左下角滚动新
- 01-10C#停止线程的方法
- 01-10C#实现清空回收站的方法
- 01-10C#通过重写Panel改变边框颜色与宽度的
- 01-10C#实现读取注册表监控当前操作系统已
随机阅读
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10C#中split用法实例总结
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10SublimeText编译C开发环境设置
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 04-02jquery与jsp,用jquery
- 01-11ajax实现页面的局部加载
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10delphi制作wav文件的方法