json字符串转换成c#类对象 (转)
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