Net 3.5 用DataContractJsonSerializer实现Json序列和反序列例子

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

前台调用的JS文件需要用到jQuery-1.2.6.jsjson2.js(http://www.json.org/json2.js),后台引用空间System.Runtime.SerializationSystem.Runtime.Serialization.Json


Json序列化和反序列化方法

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> /// <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;

}


实体类

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> [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调用测试代码

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> $( ' #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#后台生成代码

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 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}

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

javascript调用测试代码

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> $( ' #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},
dataType:
' json ' ,
timeout:
1000 ,
error:
function (XMLHttpRequest,textStatus,errorThrown){alert(textStatus)},
success:
function (result){

alert(result.success);
}

});
});

C#后台生成代码

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 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 ;
}
}
}
使用Json时需要注意,服务器端拼凑生成Json字符串时,一定要注意把字符串用\"\"包裹,不然客户端接收时肯定会报错,根据Json字符串生成对象,是根据对应的名称赋值,多于或少于都不会报错.

你可能感兴趣的:(JavaScript,jquery,.net,Ajax,json)