.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 ...
随机推荐
- sql语句大全~·留着有用
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- 代码创建FlexibleSpaceBarButton(弹性空白)
//1.创建toolbar左边的按钮,调用initWithTitle方法进行初始化 // UIBarButtonItem *extend = [[UIBarButtonItemalloc]initWi ...
- C#读取shp的属性信息
一个完整的ESRI的shape文件包括一个主文件,一个索引文件,和一个dBASE表文件.主文件是一个直接存取,变记录长度文件,其中每个记录描述一 个由其顶点列表组成的shape.在索引文件中,每条记录 ...
- JavaScript作用域(链)学习笔记
作用域是javascript老生常谈的问题,在面试题中也经常出现.此文记录本人对js作用域的理解.从以下三个方面深入探讨js作用域和js作用域链. 1.什么是作用域? 2.什么是作用域链? 3.常见面 ...
- 从数据库里面取值绑定到Ztree
1.效果图(思路:将数据库表按照一定的格式排序,然后序列化成json字符串,绑定到Ztree上并显示出来) zTree v3.5.16 API 文档 :http://www.ztree.me/v3/a ...
- 解决discuz与jquery不兼容问题——下拉列表不能用(Uncaught TypeError: Cannot set property 'position' of undefined)
问题描述: 最近学着用discuz来模仿一个门户网站,里面要把导航条做出滑动效果,要用到jquery,将要用到jquery引用到header.htm中,如下图所示: 但是由于discuz采用php以及 ...
- Firebug 调试技巧之console API
console.log(object[, object, ...]) Writes a message to the console. You may pass as many arguments a ...
- MYSQL基础03(日期函数)
工作中对日期的处理是经常遇到的,需求可能多种多样,因此重点介绍. 1.获取当前日期 select NOW() -- 结果:2015-10-28 22:41:11 ),NOW() -- 结果 2015- ...
- 《HTML5与CSS3基础教程》学习笔记 ——One Day
第一章 1. 邮箱地址的URL地址包括:mailto:+邮箱地址 2. ../表示向上走一级,开头直接使用/表示根目录 第三章 1. <header>: role = “ ...
- android 网络_网络图片查看器
xml <?xml version="1.0"?> -<LinearLayout tools:context=".MainActivity" ...