Json序列化与反序列化

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可以序列化,其它好多需要传输的数据也都可以序列化,以后遇到在继续学习吧。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值