• c#和Javascript操作同一json对象


    l刚开始学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数据源示例

    View Code
    <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);
    service.Save(list);



     


     

  • 相关阅读:
    [非专业翻译] Mapster
    [非专业翻译] Mapster
    排序之猴子算法
    1309游客统计
    1631低洼地
    1636车牌问题
    1638图形
    这是一篇小短文
    1500【自定义函数】走楼梯
    PHP 之表单提交大数据,数据不完整
  • 原文地址:https://www.cnblogs.com/lindaWei/p/2323429.html
Copyright © 2020-2023  润新知