C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON、XML序列化和反序列化,今天就来总结下json的序列化和反序列化的实现,有写得不好的望园中博友多多指教。
json序列化和反序列化帮助类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.IO; using System.Text.RegularExpressions; using System.Web.Script.Serialization;namespace HelpClass.TypeHelp {/// <summary>/// 在VS中需要添加引用System.Web.Script.Serialization的时候,请先引用System.Web.Extensions/// </summary>public class JsonHelp{/// <summary>/// json序列化(非二进制方式)/// </summary>/// <typeparam name="T"></typeparam>/// <param name="t"></param>/// <returns></returns>public static string JsonSerializer<T>(T t){JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();return jsonSerialize.Serialize(t);}/// <summary>/// json反序列化(非二进制方式)/// </summary>/// <typeparam name="T"></typeparam>/// <param name="jsonString"></param>/// <returns></returns>public static T JsonDeserialize<T>(string jsonString){JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();return (T)jsonSerialize.Deserialize<T>(jsonString);}/// <summary>/// JSON序列化(二进制方式,实体类使用[Serializable])/// </summary>/// <typeparam name="T"></typeparam>/// <param name="t"></param>/// <returns></returns>public static string JsonSerializerIO<T>(T t){DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));using (MemoryStream ms = new MemoryStream()){ser.WriteObject(ms, t);string jsonString = Encoding.UTF8.GetString(ms.ToArray());ms.Close();return jsonString;} }/// <summary>/// JSON反序列化(二进制方法,实体类使用[Serializable])/// </summary>/// <typeparam name="T"></typeparam>/// <param name="jsonString"></param>/// <returns></returns>public static T JsonDeserializeIO<T>(string jsonString){DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))){T obj = (T)ser.ReadObject(ms);return obj;}}} }
上面这个类使用了两中json序列化形式。
1、 使用System.Web.Script.Serialization进行序列化和反序列化,不过在VS中需要添加引用System.Web.Script.Serialization的时候,请先引用System.Web.Extensions。
使用方法:
(1)需要序列化和反序列化的类
public class ddd {public string d1 { get; set; }public string d2 { get; set; }public string d3 { get; set; } }
(2)序列化和反序列化
序列化单个类为json:
ddd a = new ddd { d1 = "1", d2 = "2", d3 = "3" }; string stra = HelpClass.TypeHelp.JsonHelp.JsonSerializer<ddd>(a); ddd dd2 = HelpClass.TypeHelp.JsonHelp.JsonDeserialize<ddd>(stra); 序列化类序列为json数组: ddd a = new ddd { d1 = "1", d2 = "2", d3 = "3" }; ddd b = new ddd { d1 = "11", d2 = "12", d3 = "13" }; ddd c = new ddd { d1 = "21", d2 = "22", d3 = "23" }; List<ddd> abc = new List<ddd>(); abc.Add(a); abc.Add(b); abc.Add(c); string strabc = HelpClass.TypeHelp.JsonHelp.JsonSerializer<List<ddd>>(abc); List<ddd> ddabc =HelpClass.TypeHelp.JsonHelp.JsonDeserialize<List<ddd>>(strabc);
2、 使用System.Runtime.Serialization.Json命名空间下的DataContractJsonSerializer类进行json的序列化和反序列化,该方法使用的二进制的方式来序列化和反序列化,使用该类方法时需要在对应的实体类中有相应的标识(如:[DataContract] [DataMember(Name = "")])在下面的调用时有相关说明。
使用方法:
(1)需要序列化和反序列化的类
[DataContract] public class ddd {[DataMember(Name = "d1")]public string d1 { get; set; }[DataMember(Name = "d2")]public string d2 { get; set; }[DataMember(Name = "d3")]public string d3 { get; set; }}
(2)序列化和反序列化
序列化单个类为json:
ddd a = new ddd { d1 = "1", d2 = "2", d3 = "3" }; string stra = HelpClass.TypeHelp.JsonHelp.JsonSerializer<ddd>(a); ddd dd2 = HelpClass.TypeHelp.JsonHelp.JsonDeserialize<ddd>(stra); 序列化类序列为json数组: ddd a = new ddd { d1 = "1", d2 = "2", d3 = "3" }; ddd b = new ddd { d1 = "11", d2 = "12", d3 = "13" }; ddd c = new ddd { d1 = "21", d2 = "22", d3 = "23" }; List<ddd> abc = new List<ddd>(); abc.Add(a); abc.Add(b); abc.Add(c); string strabc = HelpClass.TypeHelp.JsonHelp.JsonSerializer<List<ddd>>(abc); List<ddd> ddabc =HelpClass.TypeHelp.JsonHelp.JsonDeserialize<List<ddd>>(strabc);
看完了上面的这些或许你已经对JSON的序列化和反序列化有了一定的了解,今天就写到这里,下次就总结一下XML的序列化和反序列化。
转载于:https://www.cnblogs.com/zhanghaomars/p/3557644.html
C#中JSON序列化和反序列化相关推荐
- js序列化与反序列化和C#中json序列化与反序列化
序列化:将Object转换成JSON字符串 let data = JSON.stringify(obj); // 将JSON对象转化为JSON字符 let data = obj.toJSONStrin ...
- JAVA中JSON序列化和反序列化
JAVA中JSON序列化和反序列化 1 FASTJSON的序列化和反序列化 1.1 主函数 1.2 自定义对象 2 GSON序列化和反序列化 2.1 主函数 2.2 自定义对象 总结 不同包序列化和反 ...
- C#中json序列化与反序列化
json格式概念 JSON(JavaScript Object Notation) 是一种轻量级的数据传输格式,其采用完全独立于语言的文本格式,使JSON成为理想的数据交换语言. json由两种格式组 ...
- .Net中json序列化与反序列化
NuGet中下载Newtonsoft.Json插件. public class JsonHelper<T>{public static string ModelToJsonString(T ...
- php和js序列化,PHP中serialize和json序列化与反序列化的区别
在PHP中,serialize和json两种方式对一个对象或数组进行序列化或反序列化有什么区别呢? 假设一个对象和一个数组: PHP 1 2 3 4$web=newstdClass; $web-> ...
- python3 中的Json序列化、反序列化 和 字符编码的问题解决
python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...
- .Net 中关于序列化和反序列化Json的方法
.Net SDK中关于序列化和反序列化Json的方法 项目中遇到和服务端交互时需要传递数据包为json格式的包,所以在服务端和SDK中都需要对json进行解析和组合的操作, 并且对一些复杂结构的jso ...
- 【Unity百宝箱】游戏中的用户数据存档 | Json序列化和反序列化 | 数据加密和解密 | 干货游戏教程
目录 框架设计 工具选用 逻辑书写 框架使用 框架优化 数据加密 总结 最后 Hi 大家好,我是游戏区Bug打工人小棋. 在游戏开发过程中,我们经常有存储用户数据的这一需求,比方说:游戏音量.关卡进度 ...
- DotNet的JSON序列化与反序列化
JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...
最新文章
- VMware扩大硬盘后修改Linux逻辑卷大小
- Java中一个令人惊讶的bug
- flink启动命令参数_Flink调优之前,必须先看懂的TaskManager内存模型
- Python_基础_4
- C++纯虚函数和抽象类
- 找不到php的版本,php – 在任何版本中都找不到请求的包…
- 变异测试 java_编码的喜悦……以及Java中的变异测试
- epp是什么意思_什么是1K/2K/3K注塑?
- pytorch学习笔记(十):MLP
- kotlin半生对象_Kotlin单一对象,Kotlin伴侣对象
- 账号集中管理系统设计与实现----OpenLDAP
- 正则爬取猫眼电影排行榜 待修改版
- ComponentOne 2016 年产品规划
- 项目整体流程及项目经理工作职责
- 单片机遥控开关mos管
- 找出知晓秘密的所有专家(leetcode 2092)
- 最短路 dij floy spfa
- 双网卡同网段静态路由_WINDOWS系统下双网卡设置路由 本文主要涉及到静态路由...
- 控制系统稳态误差(静态误差)分析
- 认识电子计算机评课稿,《千以内数的认识》评课稿(最新整理)