c#和Javascript操作同一json對象的實現(xiàn)代碼
更新時間:2012年01月17日 00:19:58 作者:
剛開始學(xué)Javascript,接觸到j(luò)son對象,json可以看作是用于客戶端數(shù)據(jù)實體對象的載體。json對象一般都是通過ajax方式傳送給服務(wù)層
能否讓客戶端和服務(wù)端操作同一json對象呢?目前想到的方式是通過客戶端隱藏控件來實現(xiàn)。
以下是一個泛型列表對象 List<TrainingImplement> ,轉(zhuǎn)為json后,客戶端和服務(wù)端如何操作
1、json對象與C#泛型相互轉(zhuǎn)換代碼
//將json數(shù)據(jù)轉(zhuǎn)換為泛型
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;
}
//將泛型轉(zhuǎn)換為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數(shù)據(jù)源存入在客戶端隱藏控件中
<input type="hidden" id="hideDataSource" runat="server" />
3、注意隱藏控件放json數(shù)據(jù)后,因為包含"/",會使request請示發(fā)生錯誤,所以頁頭請設(shè)置ValidateRequest="false"
<%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true"
4、頁面加載Page_Load時,初始化json數(shù)據(jù)源
protected void Page_Load(object sender, EventArgs e)
{
#region 加載數(shù)據(jù)源
if (!IsPostBack)
{
List<TrainingImplement> list= new List<TrainingImplement> (){
new TrainingImplement (){
Code="aaa",
c_name ="bbb"
}
....
}//初始化數(shù)據(jù)源
hideDataSource.Value = ConvertObjectToByteData(list);
}
else
{
//如果是回傳,數(shù)據(jù)源從客戶端讀取
List<TrainingImplement> list = ConvertByteDataToObject<List<TrainingImplement>>(hideDataSource.Value);
hideDataSource.Value = ConvertObjectToByteData(list);
}
#endregion
4、客戶端js操作json數(shù)據(jù)源示例
<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 () {
//獲取數(shù)據(jù)源
dataSourceDom = document.getElementById(DataSourceHidName);
dataSourceJson = eval("(" + dataSourceDom.value + ")");
});
//修改第1個TrainingImplement對象的Code值示例方法
function ModifiedCode() {
dataSourceJson[0]._code = "Code001";
//將更新值后的json對象重新寫入隱藏控件中
dataSourceDom.value = $.toJSON(dataSourceJson);
}
</script>
5、服務(wù)端C#操作Json數(shù)據(jù)源
List<TrainingImplement> list = ConvertByteDataToObject<List<TrainingImplement>>(hideDataSource.Value);
以下是一個泛型列表對象 List<TrainingImplement> ,轉(zhuǎn)為json后,客戶端和服務(wù)端如何操作
1、json對象與C#泛型相互轉(zhuǎn)換代碼
復(fù)制代碼 代碼如下:
//將json數(shù)據(jù)轉(zhuǎn)換為泛型
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;
}
//將泛型轉(zhuǎn)換為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數(shù)據(jù)源存入在客戶端隱藏控件中
復(fù)制代碼 代碼如下:
<input type="hidden" id="hideDataSource" runat="server" />
3、注意隱藏控件放json數(shù)據(jù)后,因為包含"/",會使request請示發(fā)生錯誤,所以頁頭請設(shè)置ValidateRequest="false"
復(fù)制代碼 代碼如下:
<%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true"
4、頁面加載Page_Load時,初始化json數(shù)據(jù)源
復(fù)制代碼 代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
#region 加載數(shù)據(jù)源
if (!IsPostBack)
{
List<TrainingImplement> list= new List<TrainingImplement> (){
new TrainingImplement (){
Code="aaa",
c_name ="bbb"
}
....
}//初始化數(shù)據(jù)源
hideDataSource.Value = ConvertObjectToByteData(list);
}
else
{
//如果是回傳,數(shù)據(jù)源從客戶端讀取
List<TrainingImplement> list = ConvertByteDataToObject<List<TrainingImplement>>(hideDataSource.Value);
hideDataSource.Value = ConvertObjectToByteData(list);
}
#endregion
4、客戶端js操作json數(shù)據(jù)源示例
復(fù)制代碼 代碼如下:
<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 () {
//獲取數(shù)據(jù)源
dataSourceDom = document.getElementById(DataSourceHidName);
dataSourceJson = eval("(" + dataSourceDom.value + ")");
});
//修改第1個TrainingImplement對象的Code值示例方法
function ModifiedCode() {
dataSourceJson[0]._code = "Code001";
//將更新值后的json對象重新寫入隱藏控件中
dataSourceDom.value = $.toJSON(dataSourceJson);
}
</script>
5、服務(wù)端C#操作Json數(shù)據(jù)源
復(fù)制代碼 代碼如下:
List<TrainingImplement> list = ConvertByteDataToObject<List<TrainingImplement>>(hideDataSource.Value);
您可能感興趣的文章:
- C#編程實現(xiàn)對象與JSON串互相轉(zhuǎn)換實例分析
- C#實現(xiàn)json格式轉(zhuǎn)換成對象并更換key的方法
- C#中的DataSet、string、DataTable、對象轉(zhuǎn)換成Json的實現(xiàn)代碼
- 自定義實現(xiàn)Json字符串向C#對象轉(zhuǎn)變的方法
- C#中把Datatable轉(zhuǎn)換為Json的5個代碼實例
- C# XML與Json之間相互轉(zhuǎn)換實例詳解
- C#實現(xiàn)將json轉(zhuǎn)換為DataTable的方法
- C#實現(xiàn)Json轉(zhuǎn)Unicode的方法
- c#擴(kuò)展datatable轉(zhuǎn)json示例
- C# JSON格式化轉(zhuǎn)換輔助類 ConvertJson
- C#實現(xiàn)DataTable,List和Json轉(zhuǎn)換的方法
- C#實現(xiàn)JSON和對象之間互相轉(zhuǎn)換功能示例
相關(guān)文章
Javascript中document.referrer隱藏來源的方法
這篇文章主要介紹了Javascript中document.referrer隱藏來源的方法,文中通過一個實例給大家介紹了實現(xiàn)的方法,有需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。2017-01-01JS實現(xiàn)樹形結(jié)構(gòu)與數(shù)組結(jié)構(gòu)相互轉(zhuǎn)換并在樹形結(jié)構(gòu)中查找對象
這篇文章介紹了JS實現(xiàn)樹形結(jié)構(gòu)與數(shù)組結(jié)構(gòu)相互轉(zhuǎn)換并在樹形結(jié)構(gòu)中查找對象的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06JS解決?Array.fill()參數(shù)為對象指向同一個引用地址的問題
這篇文章主要介紹了JS解決?Array.fill()參數(shù)為對象指向同一個引用地址問題,解決方案使用map返回出不同的引用的地址,fill參數(shù)可隨意填寫(不為空),主要是map函數(shù)中返回的數(shù)據(jù),需要的朋友可以參考下2023-02-02JS簡單實現(xiàn)查看文檔創(chuàng)建日期、修改日期和文檔大小的方法示例
這篇文章主要介紹了JS簡單實現(xiàn)查看文檔創(chuàng)建日期、修改日期和文檔大小的方法,結(jié)合實例形式分析了JavaScript使用fileCreatedDate屬性、fileModifiedDate屬性、lastModified屬性和fileSize屬性相關(guān)操作技巧,需要的朋友可以參考下2018-04-04