ASP.NET MVC中Json(value)方法轉換成JsonResult格式的數據異步返回給JQuery進行處理,很爽,結果最近不用 ASP.NET MVC開發應用了,異步地區調用涉及到Json數據的獲取發現居然沒有好的Json格式數據轉換方法像過去一樣簡單調用 很是不爽,搜了下找到個利用System.Runtime.Serialization.Json轉換數據的方法,可以轉換為JQuery可以識別的格式,不過 調用過程中發現它將實體類的屬性名稱轉換成:”<屬性名>k__BackingField ” 這種格式,調用起來很不方便,不過還是將這種方法編寫的助手類貼出來: 注意需要引用: 首先,當然是項目是3.5的, 只引用一個System.Runtime.Serialization 是不夠的, 還要添加 System.ServiceModel System.ServiceModel.Web 的引用,OK 代碼如下:
/// <summary>
/// FileName: JSONHelper.cs
/// CLRVersion: 2.0.50727.3623
/// Author: Mikel
/// Corporation:
/// Description:JSON格式數據轉換助手類
/// 1.將List<T>類型的數據轉換為JSON格式
/// 2.將T類型對象轉換為JSON格式對象
/// 3.將JSON格式對象轉換為T類型對象
/// DateTime: 2011-09-13 14:11:34
/// </summary>
public static class JSONHelper
{
/// <summary>
/// 轉換對象為JSON格式數據
/// </summary>
/// <typeparam name="T">類</typeparam>
/// <param name="obj">對象</param>
/// <returns>字符格式的JSON數據</returns>
public static string GetJSON<T>(object obj)
{
string result = String.Empty;
try
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer =
new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
serializer.WriteObject(ms, obj);
result = System.Text.Encoding.UTF8.GetString(ms.ToArray());
}
}
catch (Exception ex)
{
throw ex;
}
return result;
}
/// <summary>
/// 轉換List<T>的數據為JSON格式
/// </summary>
/// <typeparam name="T">類</typeparam>
/// <param name="vals">列表值</param>
/// <returns>JSON格式數據</returns>
public static string JSON<T>(List<T> vals)
{
System.Text.StringBuilder st = new System.Text.StringBuilder();
try
{
System.Runtime.Serialization.Json.DataContractJsonSerializer s = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
foreach (T city in vals)
{
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
s.WriteObject(ms, city);
st.Append(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
}
}
}
catch (Exception ex)
{
throw ex;
}
return st.ToString();
}
/// <summary>
/// JSON格式字符轉換為T類型的對象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonStr"></param>
/// <returns></returns>
public static T ParseFormByJson<T>(string jsonStr)
{
T obj = Activator.CreateInstance<T>();
using (System.IO.MemoryStream ms =
new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(jsonStr)))
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer =
new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(ms);
}
}
}
還是覺得ASP.NET MVC的Json轉換比較地道,於是翻找其源碼,發現是利用的.net Framework 3.5特有的 c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Web.Extensions.dll 實現的Json數據格式轉換,實現代碼如下:
namespace System.Web.Mvc {
using System;
using System.Text;
using System.Web;
using System.Web.Script.Serialization;
[AspNetHostingPermission(System.Security.Permissions.SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(System.Security.Permissions.SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class JsonResult : ActionResult {
public Encoding ContentEncoding {
get;
set;
}
public string ContentType {
get;
set;
}
public object Data {
get;
set;
}
public override void ExecuteResult(ControllerContext context) {
if (context == null) {
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
if (!String.IsNullOrEmpty(ContentType)) {
response.ContentType = ContentType;
}
else {
response.ContentType = "application/json";
}
if (ContentEncoding != null) {
response.ContentEncoding = ContentEncoding;
}
if (Data != null) {
#pragma warning disable 0618
JavaScript.Serializer serializer = new JavaScript.Serializer();
response.Write(serializer.Serialize(Data));
#pragma warning restore 0618
}
}
}
}
看到這大家應該明白了,原來.net Framework3.5已經做好了轉換的方法,只需要調用即可,不過提醒大家注意: 一定要先引用c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Web.Extensions.dll 才能使用JavaScriptSerializer serializer = new JavaScriptSerializer(); 切記!切記!