在ASP.NET中使用JSON

引用:


最近在项目中接触到无刷新分页技术.觉得有必要记录下一些东西.
首当其冲的当然是首次用到的JSON技术.之前在做ajax的时候,对于handler传回给js的数据,总是以一个又一个的字符串数组作为载体.相当麻烦. 虽然之前看过有关JSON的文字,但是却没有想到使用JSON,于是,在界面上我会弄一个又一个隐藏域.. 汗颜...


对于JSON,又有进一步的理解了. 对于实体类中含有DateTime类型字段的对象,个人理解是最好不要使用JSON,因为在js接收到数据之后,是以毫秒为单位的.这也倒是挺好解决,问题是还含有时区,并且,假设数据库中的值是"2010-5-10 12:00:00",我没有完美解决的办法, 我所做的办法是,在查询数据库的时候,对该值进行截断,只取"2010-5-10",否则,js接收到的数据,就乱了套..

如果对于实体类中不包含DateTime类型字段,并且的字段比较多. 个人觉得JSON是首选.

下面是在asp.net中使用JSON的步骤,
在UI层,需要添加"System.ServiceModel.Web"引用.
1.首先获得想要的数据
List<Models.Blog_albumsInfo> All_album=Bll.Blog_albums.FindAllAlbums(user_id);
2.实例化JSON对象,
var json = new DataContractJsonSerializer(typeof(List<Models.Blog_albumsInfo>), new Type[] {typeof(string) });
3.将JSON获得的数据写到上下文的响应中

json.WriteObject(context.Response.OutputStream, All_album);

在js中接收到的数据,会是这样一种形式

/**************
 [{ "Album_fm": "1", "Album_id": 18, "Album_name": "
靓照1", "Sort": 18, "User_id": 1 },

{ "Album_fm": "1", "Album_id": 17, "Album_name": "靓照7", "Sort": 17, "User_id": 1 },

{ "Album_fm": "1", "Album_id": 16, "Album_name": "靓照6", "Sort": 16, "User_id": 1 }]
 **************/

上面的形式, 已经很明了的表示了实体类每个对象的数据,只需要进行字符串处理,即可得到相应数据,

在js中,可以使用eval函数把字符串数组转换成dom对象,循环遍历即可.

//转成dom对象

var obj = eval("(" + data_arr[0] + ")");

for (var i = 0; i < obj.length; i++) {

var id = obj[i].Album_id;//相应数据

var name = obj[i].Album_name;//相应数据...
}

 

需要注意的是,以上方法,是针对VS2008,并且已经打上SP1补丁的. 如果没有打SP1补丁.还需要更多步骤

UI层添加“System.Runtime.Serialization”引用。DataContract
对实体类添加[DataContract]特性,另外对每个属性添加[DataMember]特性,其他步骤与上面相同。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章