.net mvc3.0 中接收 json 数据,并转换为自定义的 C# 对象
来源:互联网 发布:手机淘宝怎么管理店铺 编辑:程序博客网 时间:2024/05/22 01:34
软件环境: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);
});
}
----------------------------------------------------------------
思路清楚了还是比较较简单的吧!祝大家编码愉快!
- .net mvc3.0 中接收 json 数据,并转换为自定义的 C# 对象
- c#实现ajax通信:向后台发送JSON字符串,接收响应字符串,并转换为对象
- 表单的数据转换为json对象
- SpringMVC接收Json数据并绑定对象
- 将Json数据转换为ADO.NET DataSet对象
- MVC3/4项目开发中遇到的ajax提交Json数据到后台Controller处理(接收参数:多重JSON)
- Java读取数据库的数据并转换为json数据
- MVC C#在后台接收一个气象台Json,在前台可以弹出json中所有的数据,但是现在想获取气象Json中每一个对象
- C#中Json数据转换
- 自定义HTTPMessageConverter接收JSON格式的数据
- 把list中的对象转换为json数据的方式
- form表单的数据转换为json对象
- 表单提交json数组,后台转换为对象接收
- c#将json转换为dynamic对象
- ASP.NET MVC3 技术(五) JSON 数据的传递
- ASP.NET MVC3 技术(五) JSON 数据的传递
- ASP.NET MVC3 技术(五) JSON 数据的传递
- android中 把json字符串从文件中去除,转换为一个 自定义对象的list中
- epoll和select/poll的区别
- spring下配置一个新的velocity engine
- hdu 1034 Candy Sharing Game
- jQuery方法大全
- js中常用的一些方法收集
- .net mvc3.0 中接收 json 数据,并转换为自定义的 C# 对象
- wine的./configure检查配置时的报错
- div后台加入html文件
- struts2 验证码例子
- VS2010 Beta2中,4个重要的新特性。号称C++0x的“四大天王”
- 工作一段时间了
- Imageview控件像地图一样可以很顺畅的滑动
- Double Checked Locking Optimization
- Oracle中取固定记录数的方法