1.什么是JSON?

Json【javascript对象表示方法】,它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成,它是完全独立于语言的

2.Json支持下面两种数据结构

    • 键值对的集合--各种不同的编程语言,都支持这种数据结构;
    • 有序的列表类型值的集合--这其中包含数组,集合,矢量,或者序列,等等。

3.Json有下面几种表现形式

1对象

一个没有顺序的“键/值”,一个对象以花括号“{”开始,并以花括号"}"结束,在每一个“键”的后面,有一个冒号,并且使用逗号来分隔多个键值对

  1. var user = "{'name':'Manas','gender':'Male','birthday':'1987-8-8'}";

2.数组

设置值的顺序,一个数组以中括号"["开始,并以中括号"]"结束,并且所有的值使用逗号分隔

  1. var user_Array = "[{'user': {'name':'Manas','gender':'Male','birthday':'1987-8-8'}}, {'user':{'name':'Mohapatra','Male':'Female','birthday':'1987-7-7'}}]";

3.字符串

任意数量的Unicode字符,使用引号做标记,并使用反斜杠来分隔。

  1. var user_String = "{\"ID\":1,\"Name\":\"Manas\",\"Address\":\"India\"}";

序列化和反序列化有三种方式:

  1. 使用JavaScriptSerializer
  2. 使用DataContractJsonSerializer
  3. 使用JSON.NET类库

我们先来看看使用 DataContractJsonSerializer的情况的引用

  1. //----------------------------------------------------------------------------------------------
  2. //使用DataContractJsonSerializer方式需要引入的命名空间,在System.Runtime.Serialization.dll.中
  3. using System.Runtime.Serialization.Json;
  4. //---

再看看使用JavaScriptJsonSerializer的情况的引用

  1. //-----------------------------------------------------------------------------------------
  2. //使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extensions.dll.中
  3. using System.Web.Script.Serialization;
  4. //-------------------------------------------------------------------------

最后看看使用JSON.NET的情况,引入类库:

  1. //使用Json.NET类库需要引入的命名空间
  2. //-----------------------------------------------------------------------------
  3. using Newtonsoft.Json;
  4. //-------------------------------------------------------------------------

最后实战控制台代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Runtime.Serialization.Json;
  7. using System.IO;
  8. using System.Web.Script.Serialization;
  9. using Newtonsoft.Json;
  10.  
  11. namespace Test_Control
  12. {
  13. public class Students
  14. {
  15. public int ID { get; set; }
  16. public string Name { get; set; }
  17. public int Age { get; set; }
  18. public string Sex { get; set; }
  19. }
  20. class Test2
  21. {
  22. static void Main(string[] args)
  23. {
  24. var user = "{'name':'Manas','gender':'Male','birthday':'1987-8-8'}";
  25.  
  26. var user_Array = "[{'user': {'name':'Manas','gender':'Male','birthday':'1987-8-8'}}, {'user':{'name':'Mohapatra','Male':'Female','birthday':'1987-7-7'}}]";
  27.  
  28. var user_String = "{\"ID\":1,\"Name\":\"Manas\",\"Address\":\"India\"}";
  29.  
  30. #region 1.DataContractJsonSerializer方式序列化和反序列化
  31. Students stu = new Students()
  32. {
  33. ID = ,
  34. Name = "曹操",
  35. Sex = "男",
  36. Age =
  37. };
  38. //序列化
  39. DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Students));
  40. MemoryStream msObj = new MemoryStream();
  41. //将序列化之后的Json格式数据写入流中
  42. js.WriteObject(msObj, stu);
  43. msObj.Position = ;
  44. //从0这个位置开始读取流中的数据
  45. StreamReader sr = new StreamReader(msObj, Encoding.UTF8);
  46. string json = sr.ReadToEnd();
  47. sr.Close();
  48. msObj.Close();
  49. Console.WriteLine(json);
  50.  
  51. //反序列化
  52. string toDes = json;
  53. //string to = "{\"ID\":\"1\",\"Name\":\"曹操\",\"Sex\":\"男\",\"Age\":\"1230\"}";
  54. using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(toDes)))
  55. {
  56. //js 反序列化为对象
  57. JavaScriptSerializer jss = new JavaScriptSerializer();
  58. var str_Object = jss.Deserialize<Students>(toDes);
  59.  
  60. DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Students));
  61. Students model = (Students)deseralizer.ReadObject(ms);//反序列化ReadObject
  62. Console.WriteLine("ID=" + model.ID);
  63. Console.WriteLine("Name=" + model.Name);
  64. Console.WriteLine("Age=" + model.Age);
  65. Console.WriteLine("Sex=" + model.Sex);
  66. }
  67. Console.ReadKey();
  68. 答案
  69. {"Age":,"ID":,"Name":"曹操","Sex":"男"}
  70. ID=
  71. Name=曹操
  72. Age=
  73. Sex=男
  74. #endregion
  75.  
  76. #region 2.JavaScriptSerializer方式实现序列化和反序列化
  77. Students stu = new Students()
  78. {
  79. ID = ,
  80. Name = "关羽",
  81. Age = ,
  82. Sex = "男"
  83. };
  84. JavaScriptSerializer js = new JavaScriptSerializer();
  85. string jsonData = js.Serialize(stu);//序列化
  86. Console.WriteLine(jsonData);
  87.  
  88. //反序列化方式一:
  89. string desJson = jsonData;
  90. Students model = js.Deserialize<Students>(desJson);// //反序列化
  91. string message = string.Format("ID={0},Name={1},Age={2},Sex={3}", model.ID, model.Name, model.Age, model.Sex);
  92. Console.WriteLine(message);
  93.  
  94. //反序列化方式2
  95. dynamic modelDy = js.Deserialize<dynamic>(desJson); //反序列化
  96. string messageDy = string.Format("动态的反序列化,ID={0},Name={1},Age={2},Sex={3}",
  97. modelDy["ID"], modelDy["Name"], modelDy["Age"], modelDy["Sex"]);//这里要使用索引取值,不能使用对象.属性
  98. Console.WriteLine(messageDy);
  99. Console.ReadKey();
  100. 答案
  101. {"ID":,"Name":"关羽","Age":,"Sex":"男"}
  102. ID=,Name=关羽,Age=,Sex=男
  103. 动态的反序列化,ID=,Name=关羽,Age=,Sex=男
  104. #endregion
  105.  
  106. #region 3.Json.NET序列化
  107. List<Students> lstStuModel = new List<Students>()
  108. {
  109. new Students(){ID=,Name="张飞",Age=,Sex="男"},
  110. new Students(){ID=,Name="潘金莲",Age=,Sex="女"}
  111. };
  112. //Json.NET序列化
  113. string jsonData = JsonConvert.SerializeObject(lstStuModel);
  114. Console.WriteLine(jsonData);
  115.  
  116. //Json.NET反序列化
  117. string json = @"{ 'Name':'C#','Age':'3000','ID':'1','Sex':'女'}";
  118. Students descJsonStu = JsonConvert.DeserializeObject<Students>(json);//反序列化
  119. Console.WriteLine(string.Format("反序列化: ID={0},Name={1},Sex={2},Sex={3}", descJsonStu.ID, descJsonStu.Name, descJsonStu.Age, descJsonStu.Sex));
  120. Console.ReadKey();
  121.  
  122. 输出结果
  123. [{"ID":,"Name":"张飞","Age":,"Sex":"男"},{"ID":,"Name":"潘金莲","Age":,"Sex":"女"}]
  124. 反序列化: ID=,Name=C#,Sex=,Sex=女
  125. #endregion
  126. }
  127. }
  128. }

Json 序列化以及反序列化的三种方式(二)的更多相关文章

  1. 序列化和反序列化的几种方式(DataContractSerializer)(二)

    DataContractSerializer 类 使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档. 无法继承此类. 命名空间: System.Runtime.Serializati ...

  2. 序列化和反序列化的几种方式(DataContractSerializer)

    序列化和反序列化的几种方式(DataContractSerializer) DataContractSerializer 类 使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档. 无法 ...

  3. C# 对象与JSON字符串互相转换的三种方式

    C# 对象与JSON字符串互相转换的三种方式 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 关于内存对象和JSON字符串的相互转换, ...

  4. JSON字符串互相转换的三种方式和性能比较

    C# 对象与JSON字符串互相转换的三种方式 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 关于内存对象和JSON字符串的相互转换, ...

  5. .NET中JSON的序列化和反序列化的几种方式

    一.什么是JSON JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集 ...

  6. Json数据的序列化与反序列化的三种经常用法介绍

    下面内容是本作者从官网中看对应的教程后所做的demo.其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方.. 还请各位读者批判性对待... 本文主要介绍在Json数据的序列化 ...

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

    在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象. 什么是JSON? JSON (JavaScript Object Notation) ...

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

    转载自  https://www.cnblogs.com/caofangsheng/p/5687994.html    谢谢 在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据 ...

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

    在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象. 什么是JSON? JSON (JavaScript Object Notation) ...

随机推荐

  1. win10 64位下VirtualBox安装CentOS6.9

    第一步:安装VritualBox 百度“VritualBox”下载安装即可: 第二步:下载Linux镜像系统并安装 这里写出我参照的博客,很详细,我就不累赘了! 原文地址:http://blog.cs ...

  2. gRPC全局异常捕获

    gRPC全局异常捕获 引 一般的.net项目比如ASP.NET.控制台程序.Windows服务.桌面程序等都会有framework自带的全局异常捕获机制.ASP.NET的ExceptionFilter ...

  3. java用freemarker实现导出word----包含图片

    分为以下三个步骤: 1.先制作word模板 2.将该文档另存为 xml 文件 3.打开xml 文件 将对应的字段替换,比如 4.将xml文件保存成ftl格式的文档 5.相应的代码: package o ...

  4. Qt之自定义布局管理器(QCardLayout)

    简述 手动布局另一种方法是通过继承QLayout类编写自己的布局管理器. 下面我们详细来举一个例子-QCardLayout.它由同名的Java布局管理器启发而来.也被称之为卡片布局,每个项目偏移QLa ...

  5. Android开发学习之事件处理和Button具体解释

    Android的事件处理机制:  1.基于监听器的事件处理 --- 组件绑定特定的事件监听器   --- 重点   2.基于回调的事件处理   --- 主要做法是重写Android组件特定的回调函数, ...

  6. [Javascript] Improve Composition with the Compose Combinator

    To make our composition more readable and easier to name we are going to ceate a compose function we ...

  7. USACO Ski Course Design解析和C语言实现

    题目大意: John农场有N(1=<N<=1000)小丘陵(山),它们高度的范围从0 到 100 但仅仅有当最大的高度差不大于17时.才干够避税.John对它们进行改造,从高的丘陵上取土放 ...

  8. BZOJ2179: FFT快速傅立叶 & caioj1450:【快速傅里叶变换】大整数乘法

    [传送门:BZOJ2179&caioj1450] 简要题意: 给出两个超级大的整数,求出a*b 题解: Rose_max出的一道FFT例题,卡掉高精度 = =(没想到BZOJ也有) 只要把a和 ...

  9. 131.lambda表达式小结

    C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda的语法形式如下:[函数对象参数](操作符重载函数参数) mutable或exception声明->返回 ...

  10. BZOJ 3240 构造矩阵+矩阵快速幂

    思路: ax+b cx+d 构造矩阵+矩阵快速幂 (需要加各种特判,,,,我好像加少了- ) //By SiriusRen #include <cstdio> #include <c ...