.NET中如何使用反序列化JSON字符串/序列化泛型对象toJsonStr
在进行 .NET Web MVC 框架开发的网站程序的时候,我们都会遇到最关键的问题,数据传输。
.NET MVC 4中的ControllerBase类建议我们用ViewBag动态数据字典形式(type:dynamic,JavaScript就是动态语言,只在运行时候才进行类型判断,而不是在编译),或者用ViewData数据字典(type:dictionary<string,object>)形式返回我们绑定的值。也就是说,ViewBag存储的数据的类型都是在使用的时候才确定的,但是ViewData的数据在创建对象的时候就已经确定了。具体区别不做赘述。
但是,这样绑定会有一定的局限性,因为网页上展示的多样化,使得上述方式复杂。比如:一个列表上显示了5条数据,又需要展示10条,我们就不能用mvc的类来解决了。更好的解决方式还是用AJAX+JS来解决,
AJAX可以处理很多类型的数据,目前JSON因为其轻量且直观方便广泛的被应用在数据传输上,后台程序提供JSON数据,前台利用JS进行处理就可以完成很多我们想做的操作。
1)序列化,顾名思义,使之变得有序,在程序中就可以理解为将一个指定对象变成了JSON键值对
后台代码由于.NET的类库我们可以轻松完成。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json; namespace Controllers
{
[Serializable]
[DataContract]
public class NewsOperationsController : Controller
{
public ActionResult Index(){
List<T> rult = new List<T>();//创建泛型对象LIST
//利用MVC的json方法直接序列化对象
return Json(rult, JsonRequestBehavior.AllowGet);
}
}
}
前台需要的是发送请求,然后处理JSON字符串
function getData() { $.post(appURL + "NewsOperations/index/" , {}, function (data) { //将json对象转化为JSON字符串
var myJson= JSON.stringify(data); console.log(myJson); }, "json");
}
2)反序列化
反序列化得步骤恰恰相反,但是更为复杂
后台接受前台的数据,有两种方式
1)通过ajax的data传送json键值对/通过form提交/或者直接写在URL后面,但是这样有一个不好之处,在后台仍然需要对数据一个一个处理,也就是说,在后台需要创建对象在为其一一赋值
2)前台加大代码量,拼凑JSON对象,发送至后台直接进行反序列化处理,为对象赋初始化。
第一种方法较为常见,第二种是我自己想尝试而为之的,也分享一下。
前台:
//提交信息,采用拼接JSON字符数组数据提交,为后台反序列化提供数据
function submitPage() {
var da = new Date();
//获取现在时间
var Now = da.getFullYear() + "-" + da.getMonth() + "-" + da.getDate() + " " + da.getHours() + ":" + da.getMinutes() + ":" + da.getSeconds();
//随便写一些数据举例
var data=[1,2,3,4,5,6];
//拼接字符串 ps: 必须写成 [{"a":b,"c":d...}]形式,因为反序列化以数组为单位,[]代表一个数组对象,每个{}代表一个JSON对象
var json = "";
json += "[{";
json += "\"NewsID\":" + data[0] + ",";
json += "\"NewsTitle\":\"" + data[0] + "\",";
json += "\"NewsContent\":\"" + data[0] + "\",";
json += "\"ReporterName\":\"" + data[0] + "\",";
json += "\"ReporterName\":\"" + data[0] + "\",";
json += "\"CategoryName\":\"" + data[0] + "\",";
json += "\"Createtime\":\"" + Now + "\"";
json += "}]";
if (confirm("是否提交!") == true) {
$.post(appURL + "NewsOperations/submit", {index:json }, function (data) {
if (data.Success) {
alert("提交成功");
} else {
alert("提交失败");
}
}, "json");
} else {
}
}
后台处理,需要用到一个静态类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using System.IO;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json; namespace controllers{
public static class deserialize
{
//返回一个指定类型的LIST对象
public static List<T> JSONStringToList<T>(this string JsonStr)
{
JavaScriptSerializer Serializer = new JavaScriptSerializer(); List<T> objs = Serializer.Deserialize<List<T>>(JsonStr); return objs;
}
//返回一个类型的对象
public static T Deserialize<T>(string json)
{
T obj = Activator.CreateInstance<T>(); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); return (T)serializer.ReadObject(ms);
}
} } public ActionResult submit(string json)
{ //反序列化JSON字符,初始化对象
List<T> model = deserialize.JSONStringToList<T>(json);
//....后续就可以自己操作啦!! } } 到这里,json的反序列化和序列化就讲完了,欢迎各位大神拍砖!小弟还没入行,学习ING,请多指教! 兴趣爱好:guitar , sing , and so on 本人QQ:601761267
.NET中如何使用反序列化JSON字符串/序列化泛型对象toJsonStr的更多相关文章
- .net 4中使用 dynamic,将json字符串转成对象的 万能方法。
在.net 4中增加了对弱类型的支持.为和弱类型的对象进行数据交换提供了方法.我们常常会遇到将json字符串转成对象的情景,虽然可以使用 JavaScriptSerializer 或者 DataCon ...
- C# JSON字符串序列化与反序列化
JSON与c#对象转换http://hi.baidu.com/donick/item/4d741338870c91fe97f88d33 C# JSON字符串序列化与反序列化 – http://www. ...
- js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)
js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...
- [参考]C# JSON字符串序列化与反序列化
C#将对象序列化成JSON字符串 public string GetJsonString() { List<Product> products = new List<Product& ...
- Newtonsoft.Json.dll反序列化JSON字符串的方法
1.直接反序列化JSON字符串 //引用序列化.反序列化JSON字符串用到的空间 using Newtonsoft.Json; using Newtonsoft.Json.Linq; //定义一个 ...
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
写在开头: 最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/,然后百 ...
- Newtonsoft.Json.dll 反序列化JSON字符串
上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...
- 在Asp.Net Core 3.0中如何使用 Newtonsoft.Json 库序列化数据
在.Net Core 3.0中 内置了一套Json序列化/反序列化方案,默认可以不再依赖,不再支持 Newtonsoft.Json. 但是.NET Core 3.0 System.Text.Jso ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
随机推荐
- ng-sortable-支持触屏的拖拽排序
1.首先是到https://github.com/a5hik/ng-sortable/tree/master/dist下载所需的文件:ng-sortable.min.js,ng-sortable.cs ...
- vs克隆新建团队项目
团队资源——克隆,完成后打开: 在解决方案资源中,添加——新建项目——web——ASP.NET web应用程序——空的,并将其设为启动项目:
- Js基础知识-入门
创建脚本块 <script language=”JavaScript”> JavaScript code goes here </script> 隐藏脚本代码 <scri ...
- PHP中变量,常量,超级全局变量小结
//一般来说,变量在函数无法在函数体中无法访问,但是常量可以.//超级全局变量确实可以的,地址栏上的参数/*$GLOBALS //变量注册的信息$_GET //地址栏参数$_POST ...
- Flex前台和后台WCF服务之间数据的接收与传输
1.首先在flex程序中通过添加webservice,方式是主菜单Data->Connect to WebService,然后输入wsdl文档的地址.如果输入地址后始终添加不进了,或者报错,一般 ...
- 二十一、Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
术语和概念 屏幕尺寸 屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如 2.8寸, 3.5寸). 简而言之, Android把所有的屏幕尺寸简化为三大类:大,正常,和小. 程序可以针对这三种尺寸的屏幕 ...
- sql语句添加约束
sql语句添加约束 --主键约束(Primary Key constraint):要求主键列的数据唯一,并且不允许为空. --唯一约束(Unique Constraint):要求该列唯一,允许为空,但 ...
- 9个超绚丽的HTML5 3D图片动画特效
在Web 1.0时代,我们的网页中图片数量非常少,而且都是以静态图片为主.HTML5的出现,推动了Web 2.0的发展,同时也催生出了很多绚丽的HTML5图片动画特效,特别是有些还有3D的动画效果.本 ...
- 勿在浮沙筑高台-- 关于IT技术学习的一点反思
常常看到前辈们大牛们感慨, 感慨我们这一代人生活在最好的时代, 拥有海量的学习资源以及指数增长的新技术与新知识. 的确, 如果你是这个时代的大学生,或是初出茅庐的程序员, 你会发现有太多太多的选择, ...
- <a href="onclick="javascript:goSearch(this)" class="click" name="Java">Java</a>为什么a标签的父节点获取不到
<script> function goSearch(event) { //var select = $('#keyInput').val($(event).attr("name ...