博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Json序列化与反序列化
阅读量:4222 次
发布时间:2019-05-26

本文共 2563 字,大约阅读时间需要 8 分钟。

Json概念

  JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。以键值对形式存在。

序列化

(1) 创建实体

(2)将实体对象序列化为Json格式

1、新建一个Person类

using System.Runtime.Serialization;  //添加命名空间,序列化  如果添加不上,需要添加引用[DataContract]//必须申明,否则无法序列化public class Person{
[DataMember(Name = "userCode")]//必须申明,否则无法序列化 private string _username; [DataMember(Name = "password")]//必须申明,否则无法序列化 private string _pwd; public Person(string name, string pwd) {
this._username = name; this._pwd = pwd; } //重写toString方法 public override string ToString() {
return "姓名:" + this._username + "\t密码:" + this._pwd; }}

2、在主函数中写

using System;using System.Runtime.Serialization.Json;//序列化对象需要引入的using System.IO;                        //序列化对象需要引入的,从内存中转换using System.Text;class Program{
static void Main(string[] args) {
Person p= new Person("鸣人", "123"); //序列化对象 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person)); MemoryStream ms = new MemoryStream(); ser.WriteObject(ms, p); //将对象转换成json存储,写入内存中 string jsonStr = Encoding.UTF8.GetString(ms.ToArray()); //再从内存中读取 ms.Dispose(); //关闭内存流 Console.WriteLine(jsonStr); Console.ReadKey(); }}

得到的结果:

在这里插入图片描述

  PS:我们写的userCode在前,password在后,可以序列化之后,显示顺序正好相反,造成这个原因是因为序列化时是按照字母排序的(想要验证的同学,可以在Person类中的注解式配置中将“[DataMember(Name = “userCode”)]”,改为“[DataMember(Name = “auserCode”)]”),这个无关紧要,对程序编写没有任何影响。因为Json仅仅是用作来传输数据的,不论是服务端的接收还是客户端的显示,都需要对json做进一步的处理,再其次也因为json存的是键值对,只要键和值对应即可,和顺序没有关系。


反序列化

(1)将接收的json装换成字节数据

(2)再转换成实体对象

1、同样需要一个实体Person类,代码省略,参考上面的Person类

2、在主函数中写

using System;using System.Runtime.Serialization.Json;//序列化对象需要引入的using System.IO;                        //序列化对象需要引入的,从内存中转换using System.Text;class Program{
static void Main(string[] args) {
//反序列化对象 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person)); string jsonStr = "{\"userCode\": \"雏田\",\"password\": \"521\" }"; byte[] byteData = UTF8Encoding.UTF8.GetBytes(jsonStr); MemoryStream ms = new MemoryStream(byteData); Person p = (Person)ser.ReadObject(ms); Console.WriteLine(p.ToString()); ms.Dispose(); //关闭内存流 Console.WriteLine("OK!"); Console.Read(); }}

得到的结果:

在这里插入图片描述

  至此已经完成了对json序列化和反序列化的过程,现在不论是对json的提交,还是对json的接收,我们都可以做处理了。虽然还不太清楚序列化的具体作用,不仅仅json可以序列化,其它好多需要传输的数据也都可以序列化,以后遇到在继续学习吧。

转载地址:http://unqmi.baihongyu.com/

你可能感兴趣的文章
thinkphp源码没问题却各种报错,Namespace declaration statement has to be the very first statement in the script
查看>>
android:dkplayer中ijkplayer延迟长的问题,达到秒开的结果
查看>>
安卓:okhttp请求,获取返回数据
查看>>
安卓:股票筛选及分析系统
查看>>
Effective Java 学习笔记一 Object的方法
查看>>
使用 ctypes 进行 Python 和 C 的混合编程
查看>>
用scikit-learn学习DBSCAN聚类
查看>>
机器学习:Python实现聚类算法(三)之总结
查看>>
使用sklearn做单机特征工程
查看>>
Python 多线程技巧 用threading.Event代替time.sleep()
查看>>
工具】Cmake与gcc的关系
查看>>
struct中长度为0的数组用途与原理
查看>>
svm笔记
查看>>
C++ 继承&多态
查看>>
C++多继承的观察和7点体会(都是实用派的观点) good
查看>>
python socket编程详细介绍
查看>>
高人对libsvm的经典总结(全面至极)
查看>>
Linux下c语言多线程编程
查看>>
火狐下easyui1.3.*弹出window框定位不到中间解决把办法
查看>>
Hadoop启动报错NoClassDefFoundError: javax/activation/DataSource解决方案
查看>>