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 相关文章推荐
客户端静态页面玩分页
Jun 26 Javascript
jQuery下通过replace字符串替换实现大小图片切换
May 22 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
Apr 11 Javascript
JSON取值前判断
Dec 23 Javascript
js判断手机和pc端选择不同执行事件的方法
Jan 30 Javascript
jQuery判断多个input file 都不能为空的例子
Jun 23 Javascript
window.onerror()的用法与实例分析
Jan 27 Javascript
jQuery实现区域打印功能代码详解
Jun 17 Javascript
vue返回上一页面时回到原先滚动的位置的方法
Dec 20 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
Jun 18 jQuery
vue 项目打包时样式及背景图片路径找不到的解决方式
Nov 12 Javascript
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
深入理解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合并两个数组的两种方式的异同
2012/09/14 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
删除重复数据的算法
2006/11/23 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
js实现3D旋转相册
2020/08/02 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
Sanic框架流式传输操作示例
2018/07/18 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python通过len函数返回对象长度
2020/10/22 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
仓库班组长岗位职责
2013/12/12 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
实习报告范文
2019/07/30 职场文书