在平常中,我们经常会用到将一个T类型的东西,序列化成Json然后返回绑定数据到页面这样一个过程。每次面试,大概都被问到怎么序列化的呀?回答总是底层封装好的,算啦,还是做个简单栗子玩玩儿吧,也好堵住面试官的嘴。

进行序列化和反序列化的时候,主要用到对象DataContractJsonSerializer,然后再配合MemoryStream,就ok啦。

不多说,先来一版简单的+泛型的栗子,之后,我们会逐步改进:

  public static class JsonConvert{/// <summary>/// Converts the obj to json./// </summary>/// <typeparam name="T"></typeparam>/// <param name="t">The t.</param>/// <returns>System.String.</returns>/// <remarks>Editor:v-liuhch CreateTime:2015/6/21 21:40:55</remarks>public static string ConvertObjToJson<T>(T t){DataContractJsonSerializer ser = new DataContractJsonSerializer(t.GetType());try {           using (MemoryStream ms=new MemoryStream()){ser.WriteObject(ms,t);string strJson=Encoding.UTF8.GetString(ms.ToArray());return strJson;}}catch (IOException){//自己处理异常吧return null;}}/// <summary>/// Jsons the deserialize./// </summary>/// <typeparam name="T"></typeparam>/// <param name="strJson">The STR json.</param>/// <returns>``0.</returns>/// <remarks>Editor:v-liuhch CreateTime:2015/6/21 21:46:37</remarks>public static T JsonDeserialize<T>(string strJson)where T:class //约束T为class,也可以放宽类型,这里只是个例子,写着玩儿的,欧巴们,此处可改{DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));try{using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson))){T obj = ser.ReadObject(ms) as T;return obj;}}catch (IOException e){//自己处理异常吧return null;}}}

然后我们写个类测试下:

//[Serializable]public  class Student{public string StudentId { get; set; }public string Name { get; set; }public int age { get; set; }public string Address { get; set; }}

测试代码:

  protected void Page_Load(object sender, EventArgs e){Student student = new Student(){StudentId = "110",Name = "水田如雅",age = 20,Address = "北京朝阳区"};#region 序列化测试string strStudentJson = JsonConvert.ConvertObjToJson<Student>(student);Response.Write(strStudentJson);#endregion#region 反序列化测试//{"Address":"北京朝阳区","Name":"水田如雅","StudentId":"110","age":20}string strJson = "{\"Address\":\"北京朝阳区\",\"Name\":\"水田如雅\",\"StudentId\":\"110\",\"age\":20}";Student newStudent = JsonConvert.JsonDeserialize<Student>(strJson);Response.Write(@"<br/><br/>" + newStudent.Address + "<br/>" + newStudent.Name + "<br/>" + newStudent.StudentId + "<br/>" + newStudent.age.ToString());#endregion}

围观下结果:

不知亲你又没有注意到,以前我们可以序列化的对象都是要打上[Serializable]这一特性的,但是在student类上我却注掉了它,why? 自己写一个运行下看看会发生啥吧,原因也不解释,请参考百度大学。微懒的童鞋可以坐等楼主心情好了更新blog!另外,本例中只是对简单类型进行了序列化,复杂情况未进行考虑,楼主会看心情再更blog的。see u~

----------------------------------------------------------第二天--------------------------------------------

补上答案:

https://msdn.microsoft.com/zh-cn/library/bb412179.aspx

.Net——使用DataContractJsonSerializer进行序列化及反序列化基本操作相关推荐

  1. 在C#中,Json的序列化和反序列化的几种方式总结

    在C#中,Json的序列化和反序列化的几种方式总结 在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象. 什么是JSON? JSON (Ja ...

  2. Json的序列化和反序列化的几种方式

    [什么是Json] 序列化:将对象转换成字节流的过程,这样就可以轻松将对象保存在磁盘文件或数据库中. 反序列化:序列化的逆过程,就是将字节流转换回原来的对象的过程. 当前主流的序列化JSON字符串主要 ...

  3. Json 序列化以及反序列化的三种方式(二)

    1.什么是JSON? Json[javascript对象表示方法],它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成,它是完全独立于语言的 2.Json支持下 ...

  4. 序列化和反序列化实现

    1. 什么是序列化? 程序员在编写应用程序的时候往往需要将程序的某些数据存储在内存中,然后将其写入文件或是将其传输到网络中的另一台计算机上以实现通讯.这个将程序数据转换成能被存储并传输的格式的过程被称 ...

  5. Json的序列化和反序列化

    1.引用命名空间: using System.Runtime.Serialization; 2.json的序列化和反序列化的方法: publicclass JsonHelper { ///<su ...

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

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

  7. json 反序列化 父子类型_json类序列化与反序列化参考

    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Runtime.Ser ...

  8. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境-- 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

  9. ASP.NET中JSON的序列化和反序列化

    JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...

最新文章

  1. 处理 react_【学习教程】React 中阻止事件冒泡的问题
  2. 插件和代码两种方法搞定WordPress回复邮件通知
  3. QEMU — 编译安装指定的版本
  4. .c/.cpp文件形成.exe文件的过程
  5. MIT CSAIL最新研究:将AI应用于流媒体视频,可获得更好的播放体验
  6. selenium模拟H5触摸滑动之-TouchAction
  7. 网络IPC:套接字之建立连接
  8. QTP 自动化测试--定义变量
  9. 在浏览器里友好的变量输出查看函数方法
  10. VMware Linux RAID5 介绍
  11. 初学XPath,其实很简单
  12. android des ecb加密_Android逆向 | 基础知识篇 01
  13. Java Greedy Snake, need to be updated
  14. 计算机软件网络工程师考试试题,网络工程师考试试题及答案.doc
  15. 在NS2 AODV协议中添加blackhole attacker(黑洞攻击) [转载]
  16. 什么是APS高级计划排程(生产计划排产)系统主要功能模块有哪些?
  17. Android Studio调用python运行thensorflow模型--CLE方案实现
  18. 2019年宁波顶岗实习
  19. 阿里云国际站代理商:利用RDS MySQL数据库云开发ToDo List
  20. ctf.show的JWT(web345-web350)

热门文章

  1. Android 检测是否连接蓝牙耳机
  2. 1/2 常用函数:内建函数
  3. 收集的伪静态中经常使用的一些参数解释,如[NC,L,QSA]等
  4. Android使用Intent实现拨打电话的动作
  5. [计算机组成原理] Booth算法 —— 补码一位乘法
  6. C#模拟HTTP POST 请求
  7. 成员变量的初始化和内存中的运行机制
  8. Bitset 用法(STL)
  9. 结合源码看nginx-1.4.0之nginx内存管理详解
  10. 关于网站图片格式 png,jpg,