c#和Javascript操作同一json对象的实现代码


Posted in Javascript onJanuary 17, 2012

能否让客户端和服务端操作同一json对象呢?目前想到的方式是通过客户端隐藏控件来实现。
以下是一个泛型列表对象 List<TrainingImplement> ,转为json后,客户端和服务端如何操作
1、json对象与C#泛型相互转换代码

//将json数据转换为泛型 
public static T ConvertByteDataToObject<T>(string byteData) 
{ 
T obj; 
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(byteData))) 
{ 
var serializer = new DataContractJsonSerializer(typeof(T)); 
obj = (T)serializer.ReadObject(ms); 
} 
return obj; 
} 
//将泛型转换为json 
public static string ConvertObjectToByteData<T>(T obj) 
{ 
string result; 
using (var ms = new MemoryStream()) 
{ 
var serializer = new DataContractJsonSerializer(typeof(T)); 
serializer.WriteObject(ms, obj); 
ms.Position = 0; 
result = Encoding.UTF8.GetString(ms.ToArray()); 
} 
return result; 
}

2、json数据源存入在客户端隐藏控件中
<input type="hidden" id="hideDataSource" runat="server" />

3、注意隐藏控件放json数据后,因为包含"/",会使request请示发生错误,所以页头请设置ValidateRequest="false"
<%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true"

4、页面加载Page_Load时,初始化json数据源
protected void Page_Load(object sender, EventArgs e) 
{ 
#region 加载数据源 
if (!IsPostBack) 
{ 
List<TrainingImplement> list= new List<TrainingImplement> (){ 
new TrainingImplement (){ 
Code="aaa", 
c_name ="bbb" 
} 
.... 
}//初始化数据源 
hideDataSource.Value = ConvertObjectToByteData(list); 
} 
else 
{ 
//如果是回传,数据源从客户端读取 
List<TrainingImplement> list = ConvertByteDataToObject<List<TrainingImplement>>(hideDataSource.Value); 
hideDataSource.Value = ConvertObjectToByteData(list); 
} 
#endregion

4、客户端js操作json数据源示例
<script type="text/javascript" src="../Scripts/jquery-1.4.3.js"></script> 
<script type="text/javascript" src="../Scripts/jquery-ui-1.8.7.custom.min.js"></script> 
<script type="text/javascript" src="../Scripts/jquery.json-2.2.min.js"></script> 
<script type ="text/javascript" > 
var DataSourceHidName = "hideDataSource"; 
var dataSourceDom; 
var dataSourceJson; 
$(document).ready 
(function () { 
//获取数据源 
dataSourceDom = document.getElementById(DataSourceHidName); 
dataSourceJson = eval("(" + dataSourceDom.value + ")"); 
}); 
//修改第1个TrainingImplement对象的Code值示例方法 
function ModifiedCode() { 
dataSourceJson[0]._code = "Code001"; 
//将更新值后的json对象重新写入隐藏控件中 
dataSourceDom.value = $.toJSON(dataSourceJson); 
} 
</script>

5、服务端C#操作Json数据源
List<TrainingImplement> list = ConvertByteDataToObject<List<TrainingImplement>>(hideDataSource.Value);
Javascript 相关文章推荐
Javascript中的isNaN函数使用说明
Nov 10 Javascript
Javascript控制input输入时间格式的方法
Jan 28 Javascript
jQuery判断多个input file 都不能为空的例子
Jun 23 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
Sep 23 Javascript
js判断数组key是否存在(不用循环)的简单实例
Aug 03 Javascript
jquery实现转盘抽奖功能
Jan 06 Javascript
bootstrap的工具提示实例代码
May 17 Javascript
Angular5集成eventbus的示例代码
Jul 19 Javascript
玩转Koa之核心原理分析
Dec 29 Javascript
vue element自定义表单验证请求后端接口验证
Dec 11 Javascript
vue 监听 Treeselect 选择项的改变操作
Aug 31 Javascript
使用Ajax实现无刷新上传文件
Apr 12 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
Jan 16 #Javascript
Prototype源码浅析 Enumerable部分之each方法
Jan 16 #Javascript
javascript椭圆旋转相册实现代码
Jan 16 #Javascript
Prototype源码浅析 Number部分
Jan 16 #Javascript
Prototype源码浅析 String部分(四)之补充
Jan 16 #Javascript
Prototype源码浅析 String部分(二)
Jan 16 #Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
Jan 15 #Javascript
You might like
全国FM电台频率大全 - 4 山西省
2020/03/11 无线电
php通用防注入程序 推荐
2011/02/26 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
js类 from qq
2006/11/13 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
Python tkinter事件高级用法实例
2018/01/31 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
美术教师自我鉴定
2014/02/12 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
小石潭记导游词
2015/02/03 职场文书
2014年终个人总结报告
2015/03/09 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
MySQL系列之二 多实例配置
2021/07/02 MySQL
MySQL笔记 —SQL运算符
2022/01/18 MySQL
A22国内电台短波广播频率表
2022/05/10 无线电