json字符串转换成c#类对象 (转)

问题描述:ExtJs的EditorGridPanel 批量修改、一次性保存。

 

1. save.js ---------------------------------------
var Json = "";         //传入后台的json字符串
var flag = false;      //是否添加逗号标志
var grid = new Ext.grid.EditorGridPanel({
    clickstoEdit : 1,
    listeners : {
                    afteredit : function(e) {
                        if (flag) {
                            Json += ',';
                        }
                        flag = true;
                        Json += '{"MID":' + '"' + e.record.data.M_id
                                + '","ECode":' + '"' + e.value + '"}';
                    }
                }

            });
});
// Json = "[{\"MID\":\"3\",\"ECode\":\"2900.66\"},{\"MID\":\"4\",\"ECode\":\"2348.52\"}]";
function SaveLotinfotoDB() // 点击‘保存’按钮,数据传送到SavaData.aspx页面。
    {
        Ext.Ajax.request({
                    url : '/SaveData.aspx',
                    params : {
                        json : Json
                    },// 这里是传到后台的参数
                    success : function(r, o) {
                        Ext.Msg.alert('提示', '修改成功!');
                    },
                    failure : function() {
                        Ext.Msg.alert("提示", "保存失败!");
                    }
                });
    }
2. SaveData.aspx.cs---------------------------------------
    protected void Page_Load(object sender, EventArgs e)
    {
        save();
    }
    /// <summary>        Author:IT蒙古人
    /// 将JSON字符串反序列化为NET对象
    /// </summary>
    public List<FreeData> isEfect(string json)
    {
        MemoryStream stream2 = new MemoryStream();
        DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(List<FreeData>));
        StreamWriter wr = new StreamWriter(stream2);
        wr.Write(json);
        wr.Flush();
        stream2.Position = 0;
        Object obj = ser2.ReadObject(stream2);
        List<FreeData> list = (List<FreeData>)obj;
        return list;
    }

    public void save()
    {
        string json = "[" + Request["json"] + "]";
        string sql = null;
        List<FreeData> ls = isEfect(json);
        for (int i = 0; i < ls.Count; i++)
        {
            int id = ls[i].MID;
            float code = ls[i].ECode);  // sql+="UPDATE userInfo SET salary="+code+" WHERE ID="+id+";";        
        }
       // return SQLEcute(sql); //执行数据库UPDATE语句,保存(多条)数据
    }
---------------------------------------------------------------
注意:那么这里的FreeData类要注意了。在FreeData类中的属性名称要和JSON数据的键名前加"_",这样才会save()函数里的ls[i].MID、ls[i].ECode获取到正确值(这个不是很肯定,但我刚开始写属性名字为别的时候获取不到值)。
3. FreeData.cs ---------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>        Author:IT蒙古人
///FreeData 的摘要说明
/// </summary>
public class FreeData
{
    private int _MID;       
    private float _ECode; 

    public FreeData()
    { }
    public float ECode
    {
        get { return _ECode; }
        set { this._ECode = value; }
    }
    public int MID {
        get { return _MID; }
        set { _MID = value; }
    }
}
=========================================================================================
大功告成,ExtJs传过来的字符串(包含多条数据的)转换成c#对象,并获取值。
望各位读者点评!

 

作者:IT蒙古人 

出处:http://hi.baidu.com/qing_bd_liang/item/537cf93751e063ca2e8ec28b

posted on 2012-08-30 15:31  AlexGeng  阅读(6569)  评论(0编辑  收藏  举报

导航