.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 ...
随机推荐
- 转: Android入门及效率开发
评注: android第三方开源框架介绍不错 转:https://segmentfault.com/a/1190000004495351 入门 Android官方培训课程中文版:http://huka ...
- Table of Contents - ActiveMQ
Getting Started ActiveMQ 的安装 Hello World Configuring Standard ActiveMQ Components Connecting to Acti ...
- 修改jar中的class文件
在工作中有可能会遇到需要修改jar的情况.正常情况下,如果有源代码的话,就比较容易,直接修改源代码,再导出新的jar文件即可.但是如果没有源代码就比较麻烦了,下面记录了没有源代码的情况修改jar的方法 ...
- Windows 10 (or 8)Chrome 观看视频发生flash不能加载,即"could't load plugins"原因之一
最近一直如题,不能看视频,后来发现从一个已经使用管理员权限打开的应用转到Chrome就可以加载flash,而从桌面打开Chrome就加载不了. 今天再次查找信息,从Ubuntu下Chrome不能加载f ...
- FFT结果的物理意义
图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低:而对 于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈 ...
- Windows下用cmd命令安装及卸载服务
第一种方法: 1. 开始 ->运行 ->cmd2. cd到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727(Framework版本号按IIS配置) ...
- VxWorks 6.9 内核编程指导之读书笔记 -- POSIX
POSIX能力 VxWorks扩展了POSIX,为了移植,VxWorks提供了额外的POSIX接口作为可选组件.VxWorks实现了POSIX 1003.1(POSIX .1)一些传统接口以及POSI ...
- Extjs Cmd 学习笔记
1.sencha app build 命令 <!-- <x-compile> --> <!-- <x-bootstrap> ...
- berkerly db 中简单的读写操作(有一些C的 还有一些C++的)
最近在倒腾BDB,才发现自己确实在C++这一块能力很弱,看了一天的api文档,总算是把BDB的一些api之间的关系理清了,希望初学者要理清数据库基本知识中的环境,句柄,游标的基本概念,这样有助于你更好 ...
- gcc常用命令介绍
GCC 全称是 GNU C Compiler,是gnu中最流行的c & c++编译器,下面我们看一下一些主要的参数使用方法. 对于一个源文件可以直接生成可执行文件 gcc test.c 默认生 ...