软件环境:jquery + .net mvc3.0 + c#功能说明:1.在 javascript 中实例化一个 json 对象,并赋值2.将 json 对象传递到 mvc3.0 项目 Controller 的 Action 中3.得到 json 字符串,序列化(转换)为C# 定义的对象
需要注意:1.如果使用 jQuery.post(url, [data], [callback], [type]),将 json 对象传递到服务器,将无法转换。 因为 jquery 在 post 前将 json 对象进行了序列化。 1.1)声明的 json 对象 var test = { IsDownLoad: false, SavePath: "c:\aaa", FileName: "test.txt" }; 1.2)被 jquery 序列化后的 json 对象 IsDownLoad=false&SavePath=c:aaa&FileName=test.txt 由于 C# 转换需要json 对象的字符串表示形式,即1.1所描述的格式(而不是被jquery序列化过的字符串) 所以,在 post 之前需要得到 json 对象的字符串表示形式,用下面的函数就可以了(找了很久啊@!!!)
var jsonStr = JSON.stringify(test);知道这些看下面的代码也就方便了!!!
----------------服务器端代码部分--------------------1.首先我们定义 C# 中的类using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace Fms.DataObject{ /// <summary> /// 压缩文件内容 /// </summary> public class ArchiveInfo { public ArchiveInfo() { FilePathList = new List<FilePath>(); } public bool IsDownLoad { set; get; } public string FileName { set; get; } public string SavePath { set; get; } public List<FilePath> FilePathList { set; get; } } /// <summary> /// 文件路径 /// </summary> public class FilePath { public string Path { set; get; } }}
2.写个两个扩展方法,用于将 json 字符转换为对象,和将对象转换为 json 字符 这两个方法只要写在和下面 Controller 同一个命名空间下就能以被调用了, 扩展方法不会用的自己去 msdn 中学吧!
/// <summary> /// 生成Json格式 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <returns></returns> public static string ToJsonStr<T>(T obj) { DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType()); using (MemoryStream stream = new MemoryStream()) { json.WriteObject(stream, obj); string szJson = Encoding.UTF8.GetString(stream.ToArray()); return szJson; } } /// <summary> /// 将JSON 字符转换为对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="str"></param> /// <returns></returns> public static T ToJsonObject<T>(this string str) { T obj = Activator.CreateInstance<T>(); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(str))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); return (T)serializer.ReadObject(ms); } }
3.定义 mvc 中的 Controllernamespace Fms.Controllers{ public class ExplorerController : Controller { /// <summary> /// 压缩文件 /// </summary> /// <returns></returns> [HttpPost] public string Archive(FormCollection c) { ArchiveInfo info = c["jsonStr"].ToJsonObject<DataObject.ArchiveInfo>();
return "ok"; } }}
----------------客户端代码部分--------------------
function Archive(){ var rows = $('#tabDirContent').datagrid('getSelections'); if (rows.length == 0) { alert("未选中任何文件!"); return; } var archive = { IsDownLoad: false, SavePath: "", FileName: "", FilePathList: [] }; var spath = $("#txtDirPath").val(); archive.FileName = $("#txtFileName").val(); archive.IsDownLoad = $("#chbDownLoad").attr("checked"); if (archive.FileName == "") { alert("请输入压缩文件名称!"); return; } if (spath == "") archive.SavePath = m_currentPath; else archive.SavePath = spath;
$.each(rows, function (i, row) { var pth = { "Path": row.FullPath }; archive.FilePathList.push(pth); });/*******************以上的逻辑大家不需要知道是做什么用的,我偷点儿懒哈!大家只需要知道 archive 东西是个标准的 json 对象就行了!!*******************/ //alert($(archive).serializeArray());
//将 json 对象转换为 json字符串表示形式,暂时用着没问题! var jsonStr = JSON.stringify(archive);
//使用 jquery 的 psot 方法提交请求 //需要注意的是 { "jsonStr": jsonStr } 段儿代码~!~! $.post("archive.aspx" , { "jsonStr": jsonStr } , function (data) { alert("data loaded: " + data); }); }
----------------------------------------------------------------思路清楚了还是比较较简单的吧!祝大家编码愉快!
转载于:https://www.cnblogs.com/xxj-jing/archive/2011/07/26/2890103.html
相关资源:各显卡算力对照表!