前台代码

datalist是类似这样的对象数据:

  var datalist= new Array();  for ( var i = 1; i <= bookCount; i++) {
var object = new Object();
object.id = i;
object.name = "同学"+i;  datalist.push(object);         }  

前台传输对象数组datalist:

function saveData(datalist){
.ajax({
type:"POST",
url:base +"/save",
data:{"datalist":JSON.stringify(datalist)},
dataType: "json",
success:function (data){  },
error:function (){  alert("insert serv wrong");
}
);  }  

在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象。

  • 什么是JSON?

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write and easy for machines to parse and generate. JSON is a text format that is completely language independent. 

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

Json支持下面两种数据结构:

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

Json有下面几种表现形式

     1.对象

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

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

     2.数组

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

var userlist = [{"user":{"name":"Manas","gender":"Male","birthday":"1987-8-8"}}, 
{"user":{"name":"Mohapatra","Male":"Female","birthday":"1987-7-7"}}]

     3.字符串

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

var userlist = "{\"ID\":1,\"Name\":\"Manas\",\"Address\":\"India\"}" 

好了,介绍完JSON,现在说正题,我们事先序列化和反序列化有三种方式:

1.使用JavaScriptSerializer类

2.使用DataContractJsonSerializer类

3.使用JSON.NET类库

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

DataContractJsonSerializer类帮助我们序列化和反序列化Json,他在程序集 System.Runtime.Serialization.dll下的System.Runtime.Serialization.Json命名空间里。

首先,这里,我新建一个控制台的程序,新建一个类Student

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;namespace JsonSerializerAndDeSerializer
{[DataContract]public class Student{[DataMember]public int ID { get; set; }[DataMember]public string Name { get; set; }[DataMember]public int Age { get; set; }[DataMember]public string Sex { get; set; }}
}

注意:上面的Student实体中的契约 [DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必须要加的,对于其他两种方式不必加,也可以的。

我们程序的代码:

要先引用程序集,在引入这个命名空间

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

#region 1.DataContractJsonSerializer方式序列化和反序列化Student stu = new Student(){ID = 1,Name = "曹操",Sex = "男",Age = 1000};//序列化DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Student));MemoryStream msObj = new MemoryStream();//将序列化之后的Json格式数据写入流中js.WriteObject(msObj, stu);msObj.Position = 0;//从0这个位置开始读取流中的数据StreamReader sr = new StreamReader(msObj, Encoding.UTF8);string json = sr.ReadToEnd();sr.Close();msObj.Close();Console.WriteLine(json);//反序列化string toDes = json;//string to = "{\"ID\":\"1\",\"Name\":\"曹操\",\"Sex\":\"男\",\"Age\":\"1230\"}";using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(toDes))){DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Student));Student model = (Student)deseralizer.ReadObject(ms);// //反序列化ReadObjectConsole.WriteLine("ID=" + model.ID);Console.WriteLine("Name=" + model.Name);Console.WriteLine("Age=" + model.Age);Console.WriteLine("Sex=" + model.Sex);}Console.ReadKey(); #endregion

运行之后结果是:

再看看使用JavaScriptJsonSerializer的情况:

JavaScriptSerializer is a class which helps to serialize and deserialize JSON. It is present in namespace System.Web.Script.Serialization which is available in assembly System.Web.Extensions.dll. To serialize a .Net object to JSON string use Serialize method. It's possible to deserialize JSON string to .Net object using Deserialize<T> or DeserializeObject methods. Let's see how to implement serialization and deserialization using JavaScriptSerializer.

这里要先引用

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

#region 2.JavaScriptSerializer方式实现序列化和反序列化Student stu = new Student(){ID = 1,Name = "关羽",Age = 2000,Sex = "男"};JavaScriptSerializer js = new JavaScriptSerializer();string jsonData = js.Serialize(stu);//序列化Console.WriteLine(jsonData);反序列化方式一:string desJson = jsonData;//Student model = js.Deserialize<Student>(desJson);// //反序列化//string message = string.Format("ID={0},Name={1},Age={2},Sex={3}", model.ID, model.Name, model.Age, model.Sex);//Console.WriteLine(message);//Console.ReadKey(); 反序列化方式2dynamic modelDy = js.Deserialize<dynamic>(desJson); //反序列化string messageDy = string.Format("动态的反序列化,ID={0},Name={1},Age={2},Sex={3}",modelDy["ID"], modelDy["Name"], modelDy["Age"], modelDy["Sex"]);//这里要使用索引取值,不能使用对象.属性Console.WriteLine(messageDy);Console.ReadKey(); #endregion

结果是:

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

下面的英文,看不懂可略过。。。

Json.NET is a third party library which helps conversion between JSON text and .NET object using the JsonSerializer. The JsonSerializer converts .NET objects into their JSON equivalent text and back again by mapping the .NET object property names to the JSON property names. It is open source software and free for commercial purposes.
The following are some awesome【极好的】 features,
  • Flexible JSON serializer for converting between .NET objects and JSON.
  • LINQ to JSON for manually reading and writing JSON.
  • High performance, faster than .NET's built-in【内嵌】 JSON serializers.
  • Easy to read JSON.
  • Convert JSON to and from XML.
  • Supports .NET 2, .NET 3.5, .NET 4, Silverlight and Windows Phone.
Let’s start learning how to install and implement:
In Visual Studio, go to Tools Menu -> Choose Library Package Manger -> Package Manager Console. It opens a command window where we need to put the following command to install Newtonsoft.Json.
Install-Package Newtonsoft.Json
OR
In Visual Studio, Tools menu -> Manage Nuget Package Manger Solution and type “JSON.NET” to search it online. Here's the figure,
//使用Json.NET类库需要引入的命名空间
//-----------------------------------------------------------------------------
using Newtonsoft.Json;
//-------------------------------------------------------------------------

#region 3.Json.NET序列化List<Student> lstStuModel = new List<Student>() {new Student(){ID=1,Name="张飞",Age=250,Sex="男"},new Student(){ID=2,Name="潘金莲",Age=300,Sex="女"}};//Json.NET序列化string jsonData = JsonConvert.SerializeObject(lstStuModel);Console.WriteLine(jsonData);Console.ReadKey();//Json.NET反序列化string json = @"{ 'Name':'C#','Age':'3000','ID':'1','Sex':'女'}";Student descJsonStu = JsonConvert.DeserializeObject<Student>(json);//反序列化Console.WriteLine(string.Format("反序列化: ID={0},Name={1},Sex={2},Sex={3}", descJsonStu.ID, descJsonStu.Name, descJsonStu.Age, descJsonStu.Sex));Console.ReadKey(); #endregion

运行之后,结果是:

总结:最后还是尽量使用JSON.NET来序列化和反序列化,性能好。

In this article we discussed about how many ways we can implement serialization/deserialization in C#. However JSON.NET wins over other implementations because it facilitates more functionality of JSON validation, JSON schema, LINQ to JSON etc. So use JSON.NET always.

转载于:https://www.cnblogs.com/BrokenIce/p/6425903.html

Json:前台对象数组传到后台解析相关推荐

  1. jsp数组自动转换html,jsp页面将选中的复选框转数组传到后台

    ajax选中的复选框转数组传到后台 var selectedItems = new Array(); $(':input[class=ids][checked]').each(function() { ...

  2. html跨页面传数组,如何把一个页面的对象数组传到另外一个页面,没有后台,存js_html/css_WEB-ITnose...

    我有两个页面,没有后台,只是用HTML实现.比如我有 1.html和2.html两页面. 在1.html中有一个temp数组,数组是存放image对象.1.html中有一个提交按钮,点击提交按钮,会打 ...

  3. js对象数组转java对象数组对象数组对象数组对象,前台js数组json字符串,后台json转为对象数组的具体实现...

    $("#savaUserSet").click(function(){ var JSONArr=[]; $("i[name='eventName']").eac ...

  4. layui中的table使用心得,json格式处理,json转字符串,json转对象,json转对象数组,layui表格图片显示修改。

    文章目录 案例一.layui中table,后台数据是json格式的处理 1. 前端显示样式 2. 前端代码 3. 后端代码:layui前端表格需要返回的数据格式要求示例 4. json格式处理工具类: ...

  5. java类和对象数组传参_java对象,数组作为参数传递给

    java 学习笔记 ( 四 )---- 对象.数组作为参数传递,静态变量.静态方法的使用, 内部类,使用文档注释 2009-10-15 20:21 ***对象作为参数传递*** class passp ...

  6. java类和对象数组传参_Java 练习(替换数组元素, 将对象作为参数传递给方法)

    替换数组元素 定义一个int型的数组:int[] arr = new int[]{12,3,3,34,56,77,432}; 让数组的每个位置上的值去除以首位置的元素,得到的结果,作为该位置上的新值然 ...

  7. c语言json如何遍历数组,JavaScript怎么遍历这样的一个Json的对象数组?用递归or循环?...

    比如有这样一个对象数组let data = [ { title: '标题一', tagName: 'h1' }, { title: '标题二', tagName: 'h1' }, { title: ' ...

  8. react将前端Blob类型文件传到后台

    react将前端Blob类型文件传到后台 最近在做一个关于语音识别的功能,具体需求是用户在线录制音频提交给后台,后台转写成文字输出txt文本.我使用的是一个第三方类库recordmp3.js,可以录制 ...

  9. Day22_7 Java学习之对象数组

    目录 一.什么是对象数组? 二.对象数组的作用: 三.对象数组的语法定义及动静初始化: 语法定义: 静态初始化:在定义数组的同时对数组元素进行初始化 动态初始化:使用运算符new为数组分配空间 四.对 ...

最新文章

  1. 使用C#调用外部Ping命令获取网络连接情况
  2. java 接口 静态方法_Java 8 接口静态方法
  3. python生产脚本_生产级部署 Python 脚本,日志收集、崩溃自启,一键搞定
  4. SQL Server 查看表定义的 2 种方法
  5. 机器学习的核心工作流程
  6. (转)Apache Ant 环境开发Android应用 二
  7. Spring注解编程基石(二)
  8. BigDecimal加减乘除运算
  9. 《C语言开发从入门到精通》一2.4 技术解惑
  10. Sql Server设置用户只能查看并访问特定数据库
  11. C++ STL与迭代器
  12. 判断二叉树是否对称的代码
  13. 框架学习 Spring之概念
  14. Matlab2014的下载和安装过程
  15. c#加粗代码_C# 8中的可空引用类型
  16. 关于身份证OCR识别,你知道多少?
  17. 【转载】装机知识显卡篇,一篇文章让小白透彻的了解显卡
  18. python实现pdf阅读器_PyQt5 从零开始制作 PDF 阅读器(一)
  19. Address localhost:8080 is already in use
  20. android自动照相机2.0,Koda相机app下载-Koda相机v2.0.12 安卓版-腾牛安卓网

热门文章

  1. LeetCode刷题之旅正式开始
  2. 数据链路层学习之LLDP
  3. python打开计算机软件,Python实现自动打开电脑应用
  4. 程序员用软件测试原理解读蚂蚁集团上市受阻!
  5. vue3项目打包优化三步走
  6. 抖音短视频流量获取攻略,掌握好这些一定可以出爆款
  7. php redis操作详解
  8. python余弦相似度_Python 简易聊天机器人(附带基础余弦相似度实现)
  9. 想运营好拼多多店铺,做好产品规划必不可少!
  10. 集合多种功能的转录调控数据库:hTFtarget,介绍及使用教程