有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的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序列化和反序列化相关推荐

  1. js序列化与反序列化和C#中json序列化与反序列化

    序列化:将Object转换成JSON字符串 let data = JSON.stringify(obj); // 将JSON对象转化为JSON字符 let data = obj.toJSONStrin ...

  2. JAVA中JSON序列化和反序列化

    JAVA中JSON序列化和反序列化 1 FASTJSON的序列化和反序列化 1.1 主函数 1.2 自定义对象 2 GSON序列化和反序列化 2.1 主函数 2.2 自定义对象 总结 不同包序列化和反 ...

  3. C#中json序列化与反序列化

    json格式概念 JSON(JavaScript Object Notation) 是一种轻量级的数据传输格式,其采用完全独立于语言的文本格式,使JSON成为理想的数据交换语言. json由两种格式组 ...

  4. .Net中json序列化与反序列化

    NuGet中下载Newtonsoft.Json插件. public class JsonHelper<T>{public static string ModelToJsonString(T ...

  5. php和js序列化,PHP中serialize和json序列化与反序列化的区别

    在PHP中,serialize和json两种方式对一个对象或数组进行序列化或反序列化有什么区别呢? 假设一个对象和一个数组: PHP 1 2 3 4$web=newstdClass; $web-> ...

  6. python3 中的Json序列化、反序列化 和 字符编码的问题解决

    python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...

  7. .Net 中关于序列化和反序列化Json的方法

    .Net SDK中关于序列化和反序列化Json的方法 项目中遇到和服务端交互时需要传递数据包为json格式的包,所以在服务端和SDK中都需要对json进行解析和组合的操作, 并且对一些复杂结构的jso ...

  8. 【Unity百宝箱】游戏中的用户数据存档 | Json序列化和反序列化 | 数据加密和解密 | 干货游戏教程

    目录 框架设计 工具选用 逻辑书写 框架使用 框架优化 数据加密 总结 最后 Hi 大家好,我是游戏区Bug打工人小棋. 在游戏开发过程中,我们经常有存储用户数据的这一需求,比方说:游戏音量.关卡进度 ...

  9. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

最新文章

  1. VMware扩大硬盘后修改Linux逻辑卷大小
  2. Java中一个令人惊讶的bug
  3. flink启动命令参数_Flink调优之前,必须先看懂的TaskManager内存模型
  4. Python_基础_4
  5. C++纯虚函数和抽象类
  6. 找不到php的版本,php – 在任何版本中都找不到请求的包…
  7. 变异测试 java_编码的喜悦……以及Java中的变异测试
  8. epp是什么意思_什么是1K/2K/3K注塑?
  9. pytorch学习笔记(十):MLP
  10. kotlin半生对象_Kotlin单一对象,Kotlin伴侣对象
  11. 账号集中管理系统设计与实现----OpenLDAP
  12. 正则爬取猫眼电影排行榜 待修改版
  13. ComponentOne 2016 年产品规划
  14. 项目整体流程及项目经理工作职责
  15. 单片机遥控开关mos管
  16. 找出知晓秘密的所有专家(leetcode 2092)
  17. 最短路 dij floy spfa
  18. 双网卡同网段静态路由_WINDOWS系统下双网卡设置路由 本文主要涉及到静态路由...
  19. 控制系统稳态误差(静态误差)分析
  20. 认识电子计算机评课稿,《千以内数的认识》评课稿(最新整理)

热门文章

  1. 【android开发】Android防止内存溢出浅析
  2. slidingmenu 中view使用练习
  3. (转)Symbian启动J2ME程序
  4. Oracle 删除归档日志脚本
  5. git restore用法
  6. leetcode算法题--二叉树的最近公共祖先
  7. DPDK vhost-user之packed ring(六)
  8. C++中拷贝构造函数的形参为什么要是const引用
  9. python可变参数_Python 的四种共享传参详解
  10. 窗口最小化之后没有图标