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 相关文章推荐
简单的jquery左侧导航栏和页面选中效果
Aug 21 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
Oct 17 Javascript
JavaScript数据结构与算法之栈详解
Mar 12 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
JS中frameset框架弹出层实例代码
Apr 01 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
Apr 18 Javascript
Node.js制作简单聊天室
Jan 12 Javascript
JavaScript判断浏览器及其版本信息
Jan 20 Javascript
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
vue.js父子组件通信动态绑定的实例
Sep 28 Javascript
JavaScript制作3D旋转相册
Aug 02 Javascript
如何用JS实现简单的数据监听
May 06 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新手上路(二)
2006/10/09 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
php基础教程
2015/08/26 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
基于jquery的超简单上下翻
2010/04/20 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
JS实现分页导航效果
2020/02/19 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
Python调用命令行进度条的方法
2015/05/05 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
Python爬虫开发与项目实战
2020/12/16 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
公务员职务工作的自我评价
2013/11/01 职场文书
文秘专业个人求职信
2013/12/22 职场文书
中秋手机店促销方案
2014/06/16 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
个人批评与自我批评
2014/10/15 职场文书
搞笑老公保证书
2015/02/26 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang