后台Json字符串转换:
当转换中文的时候用Default有时会报错,转换中文用UTF8倒是没问题。
需要添加引用:System.ServiceModel.Web 和 System.Runtime.Serialization,然后使用Using:
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
序列化与反序列化代码:
public class JsonHelper
{
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
var ser = new DataContractJsonSerializer(typeof (T));
var ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}
/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
var ser = new DataContractJsonSerializer(typeof (T));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
var obj = (T) ser.ReadObject(ms);
return obj;
}
}
后台转换Json前台使用
后台转换代码:把Dictionary
public class Handler1 : IHttpHandler
{
Dictionary<string, object> dict = new Dictionary<string, object>();
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string type = context.Request.Form["action"];
string info = context.Request.Form["info"];
switch (type)
{
case "Read": ReadInfo(); break;
case "Update": UpdateInfo(); break;
default: break;
}
context.Response.Write(new JavaScriptSerializer().Serialize(dict));
}
public bool IsReusable
{
get
{
return false;
}
}
private void ReadInfo()
{
dict.Add("Success", true);
dict.Add("Info", new Person() { Name = "蝈蝈", Age = 18, Address = "白宫" });
}
private void UpdateInfo()
{
//......
}
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
前台调用代码:
function ReadJson() {
$.ajax({
type: "Post",
url: "Handler1.ashx",
data: { action: "Read", info: "guo" },
success: function (data) {
//将字符串转换为键值对形式
var json = eval('(' + data + ')');
alert(json.Info.Name);
},
error: function (err) {
alert(err);
}
});
}