软件环境: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%3Aaaa&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 中的 Controller
    
    namespace 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);
    
    });
    
    }
   
    —————————————————————-
    
    思路清楚了还是比较较简单的吧!祝大家编码愉快!
    
   
 
