Newtonsoft.Json.dll 中的序列化与反序列化
2016-03-09 17:54
591 查看
在我们开发web项目的时候,很多情况下需要从页面传递一组数据获取从后台取一组数据。以前开发项目的时候会习惯性地选择凭借字符串:
在页面中:
data=”data1:”+value1+”data2:”+value2;
然后后台页面通过String的Split方法拆分来得到对应字段的值。或者后台拼接字符串,前台拆分。
这样确实能达到想要的结果。但会出现一些问题:当字段过多,很容易拼接出现问题。同时,当含有特殊字符时,转化会出现一些问题。
通过Newtonsoft.Json.dll 中的序列化与反序列化来解决是一个不错的办法。
封装序列化函数:
创建模型:
然后就可以使用了:
1.前台向后台传递,通过Jquery的Json序列化:
后台接收:
2.通过后台取值
[Route(“gettable”)]
public JsonResult GetTable()
{
List list = new List();
list.Add(new TableModel
{
Colom1 = “1”,
Colom2 = “2”,
Colom3 = “3”,
Colom4 = “4”
});
list.Add(new TableModel
{
Colom1 = “1”,
Colom2 = “2”,
Colom3 = “3”,
Colom4 = “4”
});
list.Add(new TableModel
{
Colom1 = “1”,
Colom2 = “2”,
Colom3 = “3”,
Colom4 = “4”
});
list.Add(new TableModel
{
Colom1 = “1”,
Colom2 = “2”,
Colom3 = “3”,
Colom4 = “4”
});
string result = JsonHelper.SerializeObject(list );
return Json(new {table= JsonHelper.SerializeObject(list )});
}
前台反序列化:
大致方式就是这样。就不用再通过字符串的方式拼接json格式的对象了。
在页面中:
data=”data1:”+value1+”data2:”+value2;
然后后台页面通过String的Split方法拆分来得到对应字段的值。或者后台拼接字符串,前台拆分。
这样确实能达到想要的结果。但会出现一些问题:当字段过多,很容易拼接出现问题。同时,当含有特殊字符时,转化会出现一些问题。
通过Newtonsoft.Json.dll 中的序列化与反序列化来解决是一个不错的办法。
封装序列化函数:
public class JsonHelper { public static string SerializeObject(Object value) { return Newtonsoft.Json.JsonConvert.SerializeObject(value); } public static T DeserializeObject<T>(string json) { if (string.IsNullOrEmpty(json)) return default(T); return JsonConvert.DeserializeObject<T>(json); } }
创建模型:
public class TableModel { public string Colom1 { get; set; } public string Colom2 { get; set; } public string Colom3 { get; set; } public string Colom4 { get; set; } }
然后就可以使用了:
1.前台向后台传递,通过Jquery的Json序列化:
var table = []; table.push({ "Colom1": "11", "Colom2": "22", "Colom3": "33", "Colom4": "44" }); table.push({ "Colom1": "11", "Colom2": "22", "Colom3": "33", "Colom4": "44" }); table.push({ "Colom1": "11", "Colom2": "22", "Colom3": "33", "Colom4": "44" }); table.push({ "Colom1": "11", "Colom2": "22", "Colom3": "33", "Colom4": "44" }); table.push({ "Colom1": "11", "Colom2": "22", "Colom3": "33", "Colom4": "44" }); var data = { "data": JSON.stringify(table) }; //alert(jsonStr); $.ajax({ type: 'post', url: "/test/default/settable", dataType: 'json', data: data, success: function (data) { } }); });
后台接收:
[Route("settable")] public ActionResult GetTable(string data) { List<TableModel> list = JsonHelper.DeserializeObject<List<TableModel>>(data); return View(); }
2.通过后台取值
[Route(“gettable”)]
public JsonResult GetTable()
{
List list = new List();
list.Add(new TableModel
{
Colom1 = “1”,
Colom2 = “2”,
Colom3 = “3”,
Colom4 = “4”
});
list.Add(new TableModel
{
Colom1 = “1”,
Colom2 = “2”,
Colom3 = “3”,
Colom4 = “4”
});
list.Add(new TableModel
{
Colom1 = “1”,
Colom2 = “2”,
Colom3 = “3”,
Colom4 = “4”
});
list.Add(new TableModel
{
Colom1 = “1”,
Colom2 = “2”,
Colom3 = “3”,
Colom4 = “4”
});
string result = JsonHelper.SerializeObject(list );
return Json(new {table= JsonHelper.SerializeObject(list )});
}
前台反序列化:
$.ajax({ type: 'get', url: "/test/default/gettable", dataType: 'json', success: function (data) { var message = ""; data.table = JSON.parse(data.table); //发序列化 $.each(data.table, function (i, item) { }); } });
大致方式就是这样。就不用再通过字符串的方式拼接json格式的对象了。
相关文章推荐
- JS分段上传文件(File)并使用MD5.js加密文件段用来后台校验
- JS替换函数
- 对<jsp:include>和<@ include>的区别和用法的简单理解
- js进阶2
- 事件中 引入 js文件
- javascript 时间控件中开始时间和结束时间的比较
- Javascript写入txt和读取txt文件示例
- Drag,js实现鼠标拖拽元素
- jsf后台获取组件
- js中的this
- 4.1 Javascript:决策-switch/case语句
- JSON 之FastJson解析
- js 中使用工厂方法和构造器方法
- js页面滚动到底部时自动加载下一页数据
- javascript中的数组
- JavaScript学习 - 数组
- [RxJS] Displaying Initial Data with StartWith
- 4 Javascript:决策-if/else语句
- js设计模式--鸭子类型
- [RxJS] Updating Data with Scan