c#和Javascript操作同一json对象的实现代码

 更新时间:2012年01月17日 00:19:58   作者:  
刚开始学Javascript,接触到json对象,json可以看作是用于客户端数据实体对象的载体。json对象一般都是通过ajax方式传送给服务层
能否让客户端和服务端操作同一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中document.referrer隐藏来源的方法

    Javascript中document.referrer隐藏来源的方法

    这篇文章主要介绍了Javascript中document.referrer隐藏来源的方法,文中通过一个实例给大家介绍了实现的方法,有需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2017-01-01
  • JS实现树形结构与数组结构相互转换并在树形结构中查找对象

    JS实现树形结构与数组结构相互转换并在树形结构中查找对象

    这篇文章介绍了JS实现树形结构与数组结构相互转换并在树形结构中查找对象的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 使用rollup打包JS的方法步骤

    使用rollup打包JS的方法步骤

    这篇文章主要介绍了使用rollup打包JS的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • uniapp小程序的图片(视频)上传的组件封装方法

    uniapp小程序的图片(视频)上传的组件封装方法

    这篇文章主要介绍了uniapp做小程序的图片(视频)上传的组件封装,要求实现多张图片的上传 ,可以限制图片上传的数量,图片预览,多次使用对图片的上传顺序排序,需要的朋友可以参考下
    2024-02-02
  • JS中的函数与对象的创建方式

    JS中的函数与对象的创建方式

    这篇文章主要介绍了JS中的函数与对象的创建方式,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • JS解决 Array.fill()参数为对象指向同一个引用地址的问题

    JS解决 Array.fill()参数为对象指向同一个引用地址的问题

    这篇文章主要介绍了JS解决 Array.fill()参数为对象指向同一个引用地址问题,解决方案使用map返回出不同的引用的地址,fill参数可随意填写(不为空),主要是map函数中返回的数据,需要的朋友可以参考下
    2023-02-02
  • js简单判断flash是否加载完成的方法

    js简单判断flash是否加载完成的方法

    这篇文章主要介绍了js简单判断flash是否加载完成的方法,通过PercentLoaded方法对flash的加载进行判断,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • JS简单实现查看文档创建日期、修改日期和文档大小的方法示例

    JS简单实现查看文档创建日期、修改日期和文档大小的方法示例

    这篇文章主要介绍了JS简单实现查看文档创建日期、修改日期和文档大小的方法,结合实例形式分析了JavaScript使用fileCreatedDate属性、fileModifiedDate属性、lastModified属性和fileSize属性相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • js 提取某()特殊字符串长度的实例

    js 提取某()特殊字符串长度的实例

    下面小编就为大家分享一篇js 提取某()特殊字符串长度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • JS中两个数组对象筛选方法

    JS中两个数组对象筛选方法

    这篇文章主要介绍了JS中两个数组对象筛选,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12

最新评论