.NET中如何使用反序列化JSON字符串/序列化泛型对象toJsonStr

时间:2023-01-15 23:28:16

在进行 .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的更多相关文章

  1. &period;net 4中使用 dynamic&comma;将json字符串转成对象的 万能方法。

    在.net 4中增加了对弱类型的支持.为和弱类型的对象进行数据交换提供了方法.我们常常会遇到将json字符串转成对象的情景,虽然可以使用 JavaScriptSerializer 或者 DataCon ...

  2. C&num; JSON字符串序列化与反序列化

    JSON与c#对象转换http://hi.baidu.com/donick/item/4d741338870c91fe97f88d33 C# JSON字符串序列化与反序列化 – http://www. ...

  3. js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)

    js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...

  4. &lbrack;参考&rsqb;C&num; JSON字符串序列化与反序列化

    C#将对象序列化成JSON字符串 public string GetJsonString() { List<Product> products = new List<Product& ...

  5. Newtonsoft&period;Json&period;dll反序列化JSON字符串的方法

      1.直接反序列化JSON字符串 //引用序列化.反序列化JSON字符串用到的空间 using Newtonsoft.Json; using Newtonsoft.Json.Linq; //定义一个 ...

  6. Newtonsoft&period;Json&period;4&period;5&period;11使用方法总结---反序列化json字符串

    写在开头: 最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/,然后百 ...

  7. Newtonsoft&period;Json&period;dll 反序列化JSON字符串

    上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...

  8. 在Asp&period;Net Core 3&period;0中如何使用 Newtonsoft&period;Json 库序列化数据

    在.Net Core 3.0中 内置了一套Json序列化/反序列化方案,默认可以不再依赖,不再支持   Newtonsoft.Json. 但是.NET Core 3.0 System.Text.Jso ...

  9. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

随机推荐

  1. python资料

    Python进阶 https://pythontips.com/ https://flyouting.gitbooks.io/learn-python-the-hard-way-cn/content/ ...

  2. &lbrack;LeetCode&rsqb; Increasing Triplet Subsequence 递增的三元子序列

    Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...

  3. 【原】iOS学习之tableView的常见BUG

    1.TableView头视图不随视图移动,头视图出现错位 错误原因:tableView的 UITableViewStyle 没有明确的声明 解决方法:在tableView声明的时候明确为 UITabl ...

  4. JavaScript 之垃圾回收和内存管理

    JavaScript 具有自动垃圾收集机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存.而在 C 和 C++ 之类的语言中,开发人员的一项基本 ...

  5. 用Qt开发第一个Hello World程序

    配置好Qt的环境变量之后,我们才可以进行下面的通过终端来使用Qt开发这个第一个程序 因为Qt的文件路径不能有中文否则会报错,所以一般都把工程文件都建立在根目录 我们创建的Qt程序包含两个部分:1.GU ...

  6. 转--Android资源总结&lpar;环境搭建&sol; 反编译工具&rpar;

    在Android发展前景相当好的情况下,本人最近搜集了一些关于Android的相关资源,当然包含以前发布的博客内容,进行了一次大整合,希望对和我一样是Android的初学者管用,如在文章中有所错误,敬 ...

  7. BZOJ1500 维修数列

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1500 [前言] 据说没打这题就相当于没打过Splay,这题简直就是让你内心崩溃的... 这 ...

  8. xshell连接linux服务器切换至oracle的sqlplus控制台时,无法使用回车键的解决方案!

    当使用xshell连接linux服务器后,切换至sqlplus控制台,当使用回车键时,出现^H的符号,貌似回车键不能用!解决方案: 1)$ stty erase ^H : 与退格键相关的设置是eras ...

  9. 明解C语言,练习13-3,从文件中读入个人信息,按身高排序后显示

    #include <stdio.h> #define NUMBER 6 #define F_PATH "D:\\C_C++\\ec13-3\\hw.dat" typed ...

  10. navicat查看mysql数据表记录数不断变化

    在使用navicat进行数据库管理的时候,在查看表对象的时候会发现,每次刷新,数据表的记录数不断变化,尤其是大表. 对于100万的数据经常会显示九十几万,当然通过count(*)出来的数据是正确的. ...