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)把对象的字节序列永久的保存到硬盘上,通常放在一个文 ...
随机推荐
- 构建通用的 React 和 Node 应用
这是一篇非常优秀的 React 教程,这篇文章对 React 组件.React Router 以及 Node 做了很好的梳理.我是 9 月份读的该文章,当时跟着教程做了一遍,收获很大.但是由于时间原因 ...
- 通过AngularJS实现前端与后台的数据对接(一)——预备工作篇
最近,笔者在做一个项目:使用AngularJS,从而实现前端与后台的数据对接.笔者这是第一次做前端与后台的数据对接的工作,因此遇到了许多问题.笔者在这些问题中,总结了一些如何实现前端与后台的数据对接的 ...
- Effective前端2:优化html标签
div { float: left; } .keyboard > div + div { margin-left: 8px; } --> div{display:table-cell;ve ...
- 【Java每日一题】20170104
20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 餐饮连锁公司IT信息化解决方案一
从餐饮企业的信息化需求来说,没有哪一种解决方案能满足所有餐饮企业的信息化建设需要.不同的餐饮业态有不同的业务流程,不同业态的信息化解决方案是目前餐饮企业信息化建设急需的,这种一站式整 ...
- Lind.DDD.LindAspects方法拦截的介绍
回到目录 什么是LindAspects 之前写了关于Aspects的文章<Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP>,今天主要在设计思想上进 ...
- Android游戏开发实践(1)之NDK与JNI开发03
Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...
- 浅谈iptables 入站 出站以及NAT实例
--------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...
- Quartz
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...
- Lesson 16 A polite request
Text If you park your car in the wrong place, a traffic policeman will soon find it. You will be ver ...