.net mvc3.0 中接收 json 数据,并转换为自定义的 C# 对象

it2022-05-05  75

软件环境: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

相关资源:各显卡算力对照表!

最新回复(0)