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. flag:用心学习的第一天

    目标是:加油学习,尽早改变世界

  2. spring学习(二)---依赖注入

    spring第二个特性是依赖注入. 学习依赖注入,首先应该明白两个问题:1,谁依赖谁:2,谁注入,注入什么? 首先还是看代码: 还是这个bean: package testSpring.busines ...

  3. Flink 报错 "Could not find a suitable table factory for 'org.apache.flink.table.factories.StreamTableSourceFactory' in the classpath"

    先上代码: table = tablexx.select('*).tablexx.groupBy('x).select('x, xx.count ) tableEnvironment // decla ...

  4. 关于this的指向

    1.谁调用该函数this指向就指向谁 2.回调函数中this的指向永远都指向window 3.箭头函数指向最近的作用域,箭头函数本身是没有this的指向 4.定时器永远指向window 5.严格模式下 ...

  5. Shiro学习

    Shiro学习资源 Shiro官网,http://shiro.apache.org/index.html 学习网站链接,http://blog.java1234.com/blog/articles/4 ...

  6. Codeforces 1065 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 GGG题略难,膜了一波zhouyuyang{\color{red} zhouyuyang}zhouyuyang巨佬的代码. 其余都挺清真的. ...

  7. Python连接oracle数据库的基本操作

    1,创建数据库连接connect和关闭数据库连接close 1.1 创建数据库连接的三种方式: 方法一:用户名.密码和监听分开写 import cx_Oracle db=cx_Oracle.conne ...

  8. 逻辑回归 vs 决策树 vs 支持向量机(II)

    原文地址: Logistic Regression vs Decision Trees vs SVM: Part II 在这篇文章,我们将讨论如何在逻辑回归.决策树和SVM之间做出最佳选择.其实 第一 ...

  9. Linux-3.0.8中基于S5PV210的GPIO模块代码追踪和分析

    编写按键驱动时,想知道内核是如何管理GPIO的,所以开始追踪代码,中间走了一些弯路,现记录于此. 追踪代码之前,我猜测:第一,这部分代码应该在系统set up阶段执行:第二,GPIO的代码应该在mac ...

  10. JObject,JArray的基本操作

    引用:https://www.cnblogs.com/dacongge/p/6957074.html 1.JObject:基本的json对象 /// <summary> /// Gets ...