近来在研究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)
{
DataContractJsonSerializerserializer = new DataContractJsonSerializer(item.GetType());
using (MemoryStreamms = new MemoryStream())
{
serializer.WriteObject(ms,item);
StringBuildersb = new StringBuilder();
sb.Append(Encoding.UTF8.GetString(ms.ToArray()));
return sb.ToString();
}
}
/// <summary>
/// Json反序列化,用于接收客户端Json后生成对应的对象
/// </summary>
public static TFromJsonTo < T > ( this string jsonString)
{
DataContractJsonSerializerser = new DataContractJsonSerializer( typeof (T));
MemoryStreamms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
TjsonObject = (T)ser.ReadObject(ms);
ms.Close();
return jsonObject;
}
/// Json序列化,用于发送到客户端
/// </summary>
public static string ToJsJson( this object item)
{
DataContractJsonSerializerserializer = new DataContractJsonSerializer(item.GetType());
using (MemoryStreamms = new MemoryStream())
{
serializer.WriteObject(ms,item);
StringBuildersb = new StringBuilder();
sb.Append(Encoding.UTF8.GetString(ms.ToArray()));
return sb.ToString();
}
}
/// <summary>
/// Json反序列化,用于接收客户端Json后生成对应的对象
/// </summary>
public static TFromJsonTo < T > ( this string jsonString)
{
DataContractJsonSerializerser = new DataContractJsonSerializer( typeof (T));
MemoryStreamms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
TjsonObject = (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 ;}
}
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---------------------------------
$(
'
#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);
}
});
});
$.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);
}
});
});
public
class
getJsonHandler:IHttpHandler
{
public void ProcessRequest(HttpContextcontext)
{
TestObjobj = new TestObj();
obj.make = " MakeisValue " ;
obj.model = " ModelisValue " ;
obj.year = 999 ;
obj.color = " ColorisValue " ;
context.Response.Write(obj.ToJsJson());
}
public bool IsReusable
{
get
{
return false ;
}
}
}
// 返回值为{"color":"ColorisValue","make":"MakeisValue","model":"ModelisValue","year":999}
{
public void ProcessRequest(HttpContextcontext)
{
TestObjobj = new TestObj();
obj.make = " MakeisValue " ;
obj.model = " ModelisValue " ;
obj.year = 999 ;
obj.color = " ColorisValue " ;
context.Response.Write(obj.ToJsJson());
}
public bool IsReusable
{
get
{
return false ;
}
}
}
// 返回值为{"color":"ColorisValue","make":"MakeisValue","model":"ModelisValue","year":999}
---------------------------------C#由Json生成对象---------------------------------------
$(
'
#postJson
'
).click(
function
(){
var m_obj = {make: " Dodge " ,model: " CoronetR/T " ,year: 1968 ,color: " yellow " };
var jsonStr = JSON.stringify(m_obj); // 用Json2.js生成Json字符串
$.ajax({
url: " postJsonHandler.ashx " ,
type: ' POST ' ,
data:{postjson:jsonStr},
success: function (result){
alert(result.success);
}
});
});
var m_obj = {make: " Dodge " ,model: " CoronetR/T " ,year: 1968 ,color: " yellow " };
var jsonStr = JSON.stringify(m_obj); // 用Json2.js生成Json字符串
$.ajax({
url: " postJsonHandler.ashx " ,
type: ' POST ' ,
data:{postjson:jsonStr},
success: function (result){
alert(result.success);
}
});
});
public
class
postJsonHandler:IHttpHandler
{
public void ProcessRequest(HttpContextcontext)
{
string jsonStr = context.Request[ " postjson " ];
TestObjobj = 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 ;
}
}
}
{
public void ProcessRequest(HttpContextcontext)
{
string jsonStr = context.Request[ " postjson " ];
TestObjobj = 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字符串生成对象,是根据对应的名称赋值,多于或少于都不会报错.