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 相关文章推荐
通过一段代码简单说js中的this的使用
Jul 23 Javascript
JavaScript中的关联数组问题
Mar 04 Javascript
javascript针对不确定函数的执行方法
Dec 16 Javascript
Javascript函数中的arguments.callee用法实例分析
Sep 16 Javascript
深入浅析javascript继承体系
Oct 23 Javascript
Vue基于NUXT的SSR详解
Oct 24 Javascript
JS随机数产生代码分享
Feb 24 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
Apr 16 Javascript
微信小程序自定义组件实现环形进度条
Nov 17 Javascript
JavaScript监听触摸事件代码实例
Dec 30 Javascript
JavaScript进阶(一)变量声明提升实例分析
May 09 Javascript
JavaScript实现简单动态表格
Dec 02 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
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
Python虚拟环境venv用法详解
2020/05/25 Python
python要安装在哪个盘
2020/06/15 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Python类型转换的魔术方法详解
2020/12/23 Python
实习医生自我评价
2013/09/22 职场文书
简历中个人求职的自我评价模板
2013/11/29 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
多人股份制合作协议书
2016/03/19 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python