c#和Javascript操作同一json對象的實現代碼_javascript技巧

來源:互聯網
上載者:User
能否讓用戶端和服務端操作同一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);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.