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);
C# 序列化与反序列化几种格式的转换的更多相关文章
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
什么是序列化 java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输.或者持久化存储到数据库或文件系统中:然后在需要的时候 ...
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2 高级使用
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
- Newtonsoft.Json 序列化和反序列化 以及时间格式
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
- json的序列化和反序列化支持时间格式转换
.NET自带的json序列有时间格式问题,为了解决自己写了个json格式的序列化和反序列化 1.引入的命名空间 using System; using System.Collections.Gener ...
- C# XML序列化与反序列化与XML格式详解
1.https://www.cnblogs.com/sandyliu1999/p/4844664.html XML是有层次结构的,序列化实际就是内存化,用连续的结构化的内存来存储表示一个对象,那么这两 ...
- Java对象的序列化与反序列化:默认格式及JSON格式(使用jackson)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3558663.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2
一.JSON使用JsonPropertyAttribute重命名属性名 1.先创建一个Movie对象,然后在其属性上添加JsonProperty,并指定重命名的名称.注意:属性Name和Directo ...
- java序列化与反序列化操作redis
笔者在使用SSM框架项目部分功能进行测试需要使用到对象的序列化与反序列化 第一种方式:jackson Demo package com.dznfit.service; import com.dznf ...
- Java基础学习总结--Java对象的序列化和反序列化
一.序列化和反序列化的概念 把对象转换成字节序列的过程称之为对象的序列化 把字节序列恢复为对象的过程称之为对象的反序列化 对象序列化的主要用途: 1)把对象的字节序列永久的保存到硬盘上,通常放在一个文 ...
随机推荐
- SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#signalR 后台创建了一个DntHub的集线器 前台在调用的时候出现了问题(经检查是代理对象 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(73)-微信公众平台开发-消息管理
系列目录 前言 回顾上一节,我们熟悉的了解了消息的请求和响应,这一节我们来建立数据库的表,表的设计蛮复杂 你也可以按自己所分析的情形结构来建表 必须非常熟悉表的结果才能运用这张表,这表表的情形涵盖比较 ...
- 破解SQLServer for Linux预览版的3.5GB内存限制 (UBUNTU篇)
在上一篇中我提到了如何破解RHEL上SQLServer的内存大小限制,但是Ubuntu上还有一道检查 这篇我将会讲解如何在3.5GB以下内存的Ubuntu中安装和运行SQLServer for Lin ...
- jQuery中取消后续执行内容
<html xmlns="http://www.w3.org/1999/xhtml"><head> <title></title&g ...
- 0042 MySQL学习笔记-入门--01
基本概念: 数据库DB(database): 数据的仓库,数据的集合,是数据的一种结构化的存储 数据库管理系统DBMS(database management system): 管理数据库的一套软件 ...
- linux-图形化远程管理协议
远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...
- TCP/IP之Nagle算法与40ms延迟
Nagle算法是针对网络上存在的微小分组可能会在广域网上造成拥塞而设计的.该算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组确认到达之前不能发送其他的小分组.同时,TCP收集这 ...
- 简单Linux命令学习笔记
1.查看进程 ps -ef | grep 关键字 /*关键字为服务名*/ netstat -unltp | grep 关键字 /*关键字为服务名或者是端口均可*/ 2.杀死进 ...
- Java模拟Windows的Event
场景 开发中遇到一个场景,业务操作会不定时的产生工作任务,这些工作任务需要放入到一个队列中,而另外会有一个线程一直检测这个队列,队列中有任务就从队列中取出并进行运算. 问题 业务场景倒是简单,只不过这 ...
- CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍
前言: 自从CYQ.Data框架出了数据库读写分离.分布式缓存MemCache.自动缓存等大功能之后,就进入了频繁的细节打磨优化阶段. 从以下的更新列表就可以看出来了,3个月更新了100条次功能: 3 ...