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 相关文章推荐
php上传图片并给图片打上透明水印的代码
Jun 07 Javascript
js异常捕获方法介绍
Apr 10 Javascript
js字母大小写转换实现方法总结
Nov 13 Javascript
JS中判断JSON数据是否存在某字段的方法
Mar 07 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
Sep 02 Javascript
node.js路径处理方法以及绝对路径详解
Mar 04 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
Nov 17 Javascript
jQuery 的 ready()的纯js替代方法
Nov 20 Javascript
详解vue-cli 脚手架项目-package.json
Jul 04 Javascript
微信小程序的授权实现过程解析
Aug 02 Javascript
JavaScript基础之this和箭头函数详析
Sep 05 Javascript
js实现拖拽与碰撞检测
Sep 18 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 addslashes和mysql_real_escape_string
2010/01/24 PHP
php懒人函数 自动添加数据
2011/06/28 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
浅谈php://filter的妙用
2019/03/05 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
2020/09/13 PHP
基于jquery的超简单上下翻
2010/04/20 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
vue中的inject学习教程
2019/04/24 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
python 实现绘制整齐的表格
2019/11/18 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
Python request post上传文件常见要点
2020/11/20 Python
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
大学生物业管理求职信
2013/10/24 职场文书
简历自我评价怎么写呢?
2014/01/06 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
教研处工作方案
2014/05/26 职场文书
项目负责人任命书
2014/06/04 职场文书
党员剖析材料范文
2014/12/18 职场文书
盲山观后感
2015/06/11 职场文书
Win10系统下配置Java环境变量
2021/06/13 Java/Android
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript
MySQL RC事务隔离的实现
2022/03/31 MySQL