Json:前台对象数组传到后台解析
前台代码
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
![](/assets/blank.gif)
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; }} }
![](/assets/blank.gif)
注意:上面的Student实体中的契约 [DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必须要加的,对于其他两种方式不必加,也可以的。
我们程序的代码:
要先引用程序集,在引入这个命名空间
//---------------------------------------------------------------------------------------------- //使用DataContractJsonSerializer方式需要引入的命名空间,在System.Runtime.Serialization.dll.中 using System.Runtime.Serialization.Json; //--------------------------------------------------------------------------------------------
![](/assets/blank.gif)
#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
![](/assets/blank.gif)
运行之后结果是:
再看看使用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; //----------------------------------------------------------------------------------------
![](/assets/blank.gif)
#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
![](/assets/blank.gif)
结果是:
最后看看使用JSON.NET的情况,引入类库:
下面的英文,看不懂可略过。。。
- 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.
![](/assets/blank.gif)
//使用Json.NET类库需要引入的命名空间 //----------------------------------------------------------------------------- using Newtonsoft.Json; //-------------------------------------------------------------------------
![](/assets/blank.gif)
#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
![](/assets/blank.gif)
运行之后,结果是:
总结:最后还是尽量使用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:前台对象数组传到后台解析相关推荐
- jsp数组自动转换html,jsp页面将选中的复选框转数组传到后台
ajax选中的复选框转数组传到后台 var selectedItems = new Array(); $(':input[class=ids][checked]').each(function() { ...
- html跨页面传数组,如何把一个页面的对象数组传到另外一个页面,没有后台,存js_html/css_WEB-ITnose...
我有两个页面,没有后台,只是用HTML实现.比如我有 1.html和2.html两页面. 在1.html中有一个temp数组,数组是存放image对象.1.html中有一个提交按钮,点击提交按钮,会打 ...
- js对象数组转java对象数组对象数组对象数组对象,前台js数组json字符串,后台json转为对象数组的具体实现...
$("#savaUserSet").click(function(){ var JSONArr=[]; $("i[name='eventName']").eac ...
- layui中的table使用心得,json格式处理,json转字符串,json转对象,json转对象数组,layui表格图片显示修改。
文章目录 案例一.layui中table,后台数据是json格式的处理 1. 前端显示样式 2. 前端代码 3. 后端代码:layui前端表格需要返回的数据格式要求示例 4. json格式处理工具类: ...
- java类和对象数组传参_java对象,数组作为参数传递给
java 学习笔记 ( 四 )---- 对象.数组作为参数传递,静态变量.静态方法的使用, 内部类,使用文档注释 2009-10-15 20:21 ***对象作为参数传递*** class passp ...
- java类和对象数组传参_Java 练习(替换数组元素, 将对象作为参数传递给方法)
替换数组元素 定义一个int型的数组:int[] arr = new int[]{12,3,3,34,56,77,432}; 让数组的每个位置上的值去除以首位置的元素,得到的结果,作为该位置上的新值然 ...
- c语言json如何遍历数组,JavaScript怎么遍历这样的一个Json的对象数组?用递归or循环?...
比如有这样一个对象数组let data = [ { title: '标题一', tagName: 'h1' }, { title: '标题二', tagName: 'h1' }, { title: ' ...
- react将前端Blob类型文件传到后台
react将前端Blob类型文件传到后台 最近在做一个关于语音识别的功能,具体需求是用户在线录制音频提交给后台,后台转写成文字输出txt文本.我使用的是一个第三方类库recordmp3.js,可以录制 ...
- Day22_7 Java学习之对象数组
目录 一.什么是对象数组? 二.对象数组的作用: 三.对象数组的语法定义及动静初始化: 语法定义: 静态初始化:在定义数组的同时对数组元素进行初始化 动态初始化:使用运算符new为数组分配空间 四.对 ...
最新文章
- 使用C#调用外部Ping命令获取网络连接情况
- java 接口 静态方法_Java 8 接口静态方法
- python生产脚本_生产级部署 Python 脚本,日志收集、崩溃自启,一键搞定
- SQL Server 查看表定义的 2 种方法
- 机器学习的核心工作流程
- (转)Apache Ant 环境开发Android应用 二
- Spring注解编程基石(二)
- BigDecimal加减乘除运算
- 《C语言开发从入门到精通》一2.4 技术解惑
- Sql Server设置用户只能查看并访问特定数据库
- C++ STL与迭代器
- 判断二叉树是否对称的代码
- 框架学习 Spring之概念
- Matlab2014的下载和安装过程
- c#加粗代码_C# 8中的可空引用类型
- 关于身份证OCR识别,你知道多少?
- 【转载】装机知识显卡篇,一篇文章让小白透彻的了解显卡
- python实现pdf阅读器_PyQt5 从零开始制作 PDF 阅读器(一)
- Address localhost:8080 is already in use
- android自动照相机2.0,Koda相机app下载-Koda相机v2.0.12 安卓版-腾牛安卓网