您的位置:首页 > Web前端 > JavaScript

.Net 3.5 用DataContractJsonSerializer实现Json序列和反序列

2013-05-10 18:30 465 查看
近来在研究jQuery,用$.ajax在与后台交换数据时用到Json格式,后台与前台序列化和反序列化方法研究了很久才成功,发文共享.

前台调用的JS文件需要用到jQuery-1.2.6.js和json2.js,后台引用空间System.Runtime.Serialization和System.Runtime.Serialization.Json

Json序列化和反序列化方法

/// <summary>

/// Json序列化,用于发送到客户端

/// </summary>

public static string ToJsJson(this object item)

{

DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());

using (MemoryStream ms = new MemoryStream())

{

serializer.WriteObject(ms, item);

StringBuilder sb = new StringBuilder();

sb.Append(Encoding.UTF8.GetString(ms.ToArray()));

return sb.ToString();

}

}

/// <summary>

/// Json反序列化,用于接收客户端Json后生成对应的对象

/// </summary>

public static T FromJsonTo<T>(this string jsonString)

{

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));

MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));

T jsonObject = (T)ser.ReadObject(ms);

ms.Close();

return jsonObject;

}

实体类

[DataContract]

public class TestObj

{

[DataMember]

public string make { get; set; }

[DataMember]

public string model { get; set; }

[DataMember]

public int year { get; set; }

[DataMember]

public string color { get; set; }

}

--------------------------------------------javascript获取Json---------------------------------

javascript调用测试代码

$('#getJson').click(function() {

$.ajax({

url: "getJsonHandler.ashx",

type: 'GET',

data: {},

dataType: 'json',

timeout: 1000,

error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus) },

success: function(result) {

alert(result.make);

alert(result.model);

alert(result.year);

alert(result.color);

}

});

});

C#后台生成代码

public class getJsonHandler: IHttpHandler

{

public void ProcessRequest(HttpContext context)

{

TestObj obj = new TestObj();

obj.make = "Make is Value";

obj.model = "Model is Value";

obj.year = 999;

obj.color = "Color is Value";

context.Response.Write(obj.ToJsJson());

}

public bool IsReusable

{

get

{

return false;

}

}

}

//返回值为 {"color":"Color is Value","make":"Make is Value","model":"Model is Value","year":999}

---------------------------------C#由Json生成对象---------------------------------------

javascript调用测试代码

$('#postJson').click(function() {

var m_obj = { make: "Dodge", model: "Coronet R/T", year: 1968, color: "yellow" };

var jsonStr = JSON.stringify(m_obj); //用Json2.js生成Json字符串

$.ajax({

url: "postJsonHandler.ashx",

type: 'POST',

data: { postjson: jsonStr },

dataType: 'json',

timeout: 1000,

error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus) },

success: function(result) {

alert(result.success);

}

});

});

C#后台生成代码

public class postJsonHandler: IHttpHandler

{

public void ProcessRequest(HttpContext context)

{

string jsonStr = context.Request["postjson"];

TestObj obj = jsonStr.FromJsonTo<TestObj>();

if (string.IsNullOrEmpty(obj.make) || string.IsNullOrEmpty(obj.model) || string.IsNullOrEmpty(obj.color)

|| obj.year < 0)

{

context.Response.Write("{success:false}");

}

else

{

context.Response.Write("{success:true}");

}

public bool IsReusable

{

get

{

return false;

}

}

}

使用Json时需要注意,服务器端拼凑生成Json字符串时,一定要注意把字符串用\"\"包裹,不然客户端接收时肯定会报错,根据Json字符串生成对象,是根据对应的名称赋值,多于或少于都不会报错.

原文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐