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日期对象的dateAdd与dateDiff方法
Nov 18 Javascript
原生javascript模仿win8等待提示圆圈进度条
Apr 24 Javascript
如何使用Vuex+Vue.js构建单页应用
Oct 27 Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 Javascript
jQuery实现遮罩层登录对话框
Dec 29 Javascript
AngularJS 教程及实例代码
Oct 23 Javascript
vue router-link传参以及参数的使用实例
Nov 10 Javascript
webpack vue项目开发环境局域网访问方法
Mar 20 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
May 09 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
Jun 24 Javascript
让mocha支持ES6模块的方法实现
Jan 14 Javascript
Vue路由切换页面不更新问题解决方案
Jul 10 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
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
python实现备份目录的方法
2015/08/03 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
在双python下设置python3为默认的方法
2018/10/31 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
python 两个数据库postgresql对比
2019/10/21 Python
pygame实现成语填空游戏
2019/10/29 Python
python字符串反转的四种方法详解
2019/12/02 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
学校标语口号大全
2015/12/26 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
入党心得体会
2019/06/20 职场文书
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android