c#和Javascript操作同一json对象的实现代码
能否让客户端和服务端操作同一json对象呢?目前想到的方式是通过客户端隐藏控件来实现。
以下是一个泛型列表对象 List<TrainingImplement> ,转为json后,客户端和服务端如何操作
1、json对象与C#泛型相互转换代码
2、json数据源存入在客户端隐藏控件中
3、注意隐藏控件放json数据后,因为包含"/",会使request请示发生错误,所以页头请设置ValidateRequest="false"
4、页面加载Page_Load时,初始化json数据源
4、客户端js操作json数据源示例
5、服务端C#操作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);
相关推荐
nmgxzm00 2020-11-10
ifconfig 2020-10-14
hhanbj 2020-11-17
zfszhangyuan 2020-11-16
古叶峰 2020-11-16
一个智障 2020-11-15
jipengx 2020-11-12
81427005 2020-11-11
xixixi 2020-11-11
游走的豚鼠君 2020-11-10
苗疆三刀的随手记 2020-11-10
Web卓不凡 2020-11-03
小飞侠V 2020-11-02
帕尼尼 2020-10-30
爱读书的旅行者 2020-10-26
帕尼尼 2020-10-23
杏仁技术站 2020-10-23
淼寒儿 2020-10-22