JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

   在 前端浏览器 和 后端服务器 之间通常会使用 JSON格式的数据 来进行数据交互,而JSON格式的数据在 前端Javascript  和 后端C# 语言中 最终都会以对象的形式来使用,而 JSON格式的数据在http协议中是以JSON字符串的形式进行传输 的,所以就涉及到JSON字符串与对象之间的相互转换问题。

    

首先,我们来看一下一个C#的类变量数据是怎么从后端C#走向前端Javascript的。

    

源码如下:

(C#对象  ==>   json字符串)

        /// <summary>
/// Json字符转换的配置对象,设置了基本Json配置的信息
/// </summary>
private static readonly JsonSerializerSettings Settings =
new JsonSerializerSettings { //忽略循环引用,如果设置为Error,则遇到循环引用的时候报错(建议设置为Error,这样更规范)
ReferenceLoopHandling = ReferenceLoopHandling.Ignore, //日期格式化,默认的格式也不好看
DateFormatString = "yyyy-MM-dd HH:mm:ss", //json中属性开头字母小写的驼峰命名
ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
}; //根据配置规则得到json转换类
private static JsonSerializer scriptSerializer = JsonSerializer.Create(Settings); /// <summary>
/// 将任意一个对象转换为json字符串的表示形式
/// </summary>
/// <param name="obj">要转换成json字符串的对象</param>
/// <returns>转换后的json字符串,失败则返回null</returns>
public static string ConvertToJsonStr(object obj)
{
try
{
StringWriter stringWriter = new StringWriter();
scriptSerializer.Serialize(stringWriter, obj); return stringWriter.ToString();
}
catch
{
return null;
} }

(json字符串   ==>   javascript对象)

var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}

然后,再反过来看一下一个Javascript的变量数据又是怎么一步步走向C#后端的。

    

源码如下:

(json字符串  ==>  c#对象)

        /// <summary>
/// 将json字符串转换成对象
/// </summary>
/// <typeparam name="T">要转换成的类型</typeparam>
/// <param name="jsonStr">json字符串</param>
/// <returns>成功转换返回对象,否则返回null</returns>
public static T JsonStrToObject<T>(string jsonStr)
{
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); return javaScriptSerializer.Deserialize<T>(jsonStr);
}
catch
{
return default(T);
} }

(javascript对象   ==>   json字符串)

var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'

补充: 

   在这里之所以不使用.NET自带的 JavaScriptSerializer 类来进行对象到 JSON 字符串之间的转换,是因为在解析日期格式的数据时有缺陷,而使用 Newton.json 能弥补这种缺陷。 
   其实,我们使用Jquery进行AJAX编程的时候,Jquery提供的ajax函数已经在内部封装了由JSON字符串转换成JavaScript对象的机制,所以很多时候我们并不需要自己动手实现 (json字符串 ==> javascript对象) 转换。 

前端JS 与 后台C# 之间JSON序列化与反序列化(笔记)的更多相关文章

  1. C# JSON 序列化和反序列化——JavaScriptSerializer实现

    一. JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.您无法访问序列化程序的此实例.但是,此类公开了公共 API.因此, ...

  2. 转:Json序列化和反序列化

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

  3. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  4. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

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

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

  6. Net中JSON序列化和反序列化处理(日期时间特殊处理)

    0  缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...

  7. 在net中json序列化与反序列化

    准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则: 数据在键值对中 数据由逗号分隔 花括 ...

  8. Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解

    Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全   Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...

  9. 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化

    孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...

随机推荐

  1. mysql创建新的用户及flush privileges解析

    1.首先以root用户登录到mysql mysql -u root -p 2.接着要知道mysql的用户信息是存储在mysql.user(mysql数据库下的user数据表)下的,所以我们只需添加一个 ...

  2. ili 一例业务系统框架

    ili即ilinei的简称,像名字一样,是ILINEI团队的内部项目简化而来.2017年金鸡报晓,我们为同行送来了一个简单.快速.轻量级的PHP开源系统,它的任务当然也是唯一的任务,就是提高WEB开发 ...

  3. RPA答疑

    变量:部分主要对于工程中的变量进行管理和设置,支持手动拖拉至右侧画布 1全局变量:全局变量可以在整个工程中传递,被不同的子流程或函数进行调用,全局可见可调用 2 流程参数:只对子流程设置传入参数,供子 ...

  4. Atcoder Beginner Contest 115 D Christmas 模拟,递归 B

    D - Christmas Time limit : 2sec / Memory limit : 1024MB Score : 400 points Problem Statement In some ...

  5. mybatis-plus 3.X 配置

    官网配置参数说明地址:https://mp.baomidou.com/config/#logicdeletevalue 本地配置:yml mybatis-plus: mapper-locations: ...

  6. Python3--Numpy

    数组的形状是它有多少行和列,上面的数组有5行和5列,所以它的形状是(5,5). itemsize属性是每个项占用的字节数.这个数组的数据类型是int 64,一个int 64中有64位,一个字节中有8位 ...

  7. 基于MFC的socket编程

    网络编程 1.windows 套接字编程(开放的网络编程接口)添加头文件#include<windows.h> 2.套接字及其分类 socket分为两种:(1)数据报socket:无连接套 ...

  8. 网易彩票-我的彩票-设置-cell跳转界面

    1. 点击“cell”推出对应的界面 1.1 新建group,名为:Setting 路径:MYLottery(我的彩票)->Controller 1.2 新建Cocoa Touch Class, ...

  9. Unable to launch the IIS Express Web server

    尝试运行程序,出现此异常提示Unable to launch the IIS Express Web server. 解决问题,是把网址修改为另一个试试: 把http://localhost:1114 ...

  10. 背水一战 Windows 10 (120) - 后台任务: 后台上传任务

    [源码下载] 背水一战 Windows 10 (120) - 后台任务: 后台上传任务 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台上传任务 示例演示 uwp 的后台上 ...