Json.net 的简单应用(个人随笔)
2012-06-15 15:46
260 查看
在接下来的项目中可能需要大量使用Json 所以就想到了Json.net 这个框架; 以前需要用json 都是自己拼接;这个有多笨就不多说了;
.net 自带的 Json库 不会用!!
所以一大早来 就去网上逛了一圈 下载了 json.net 4.0
写了一小段 测试一下 还OK的! 下面上代码
先把 Newtonsoft.Json.dll 引用进项目
然后添加 一个 ashx 文件 命名为 jsontest.ashx
代码如下:
上面这段代码就不多说了。
这段就是 Json.net 转换成Json 的方法!
下面就是页面调用了,新建页面 命名为json.aspx
代码:
然后运行结果
后来我又想到用Webservice 作为数据来源 于是
新建一个 webservice 命名为JsonService.asmx
页面 还是上面那个页面
但是遇到几个问题弄的我头大。。我一开始用ajax 基本之接发 aspx.cs 的没试过用webservice 所以。。。
下面只发 JS 代码:
一开始我写的和调用ashx 的方法一样
显然是不对的 result.length 为 undefined 用firedebug 发现
result 是这个结果。那么显然不对
后来把 result改成result.d
alert 出来 是那个json 串没错。。 于是又试下去
但是问题又来了打印出来 100多条数据而且 值都是 undefined 再调试看了一下。。result.d.length就为111
那么result.d这个值就不是 json 而是一个字符串
又去网上搜了一下。发现要加一个转换 eval();
但是这个串直接这么转换还是不对。。后来找到原因了换成下面的 转换方式就正确了
这个我也不知道是什么原理 反正弄出来了!
下面贴上正确的代码 顺便还调用了 默认的 Hello word
学了第一步啊。。
.net 自带的 Json库 不会用!!
所以一大早来 就去网上逛了一圈 下载了 json.net 4.0
写了一小段 测试一下 还OK的! 下面上代码
先把 Newtonsoft.Json.dll 引用进项目
然后添加 一个 ashx 文件 命名为 jsontest.ashx
代码如下:
<%@ WebHandler Language="C#" Class="jsontest" %> using System; using System.Web; using System.Collections.Generic; public class jsontest : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; Person info = new Person(); info.Name = "a"; info.Age = 18; info.Birthday = Convert.ToDateTime("1988-05-03"); Person info1 = new Person(); info1.Name = "b"; info1.Age = 13; info1.Birthday = Convert.ToDateTime("1988-05-20"); List<Person> list = new List<Person>(); list.Add(info); list.Add(info1); string json = Newtonsoft.Json.JsonConvert.SerializeObject(list); context.Response.Write(json); //return json; } public bool IsReusable { get { return false; } } } public class Person { public string Name { get; set; } public int Age { get; set; } [JsonConverter(typeof(IsoDateTimeConverter))] public DateTime Birthday { get; set; } }
上面这段代码就不多说了。
string json = Newtonsoft.Json.JsonConvert.SerializeObject(list);
这段就是 Json.net 转换成Json 的方法!
下面就是页面调用了,新建页面 命名为json.aspx
代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="json.aspx.cs" Inherits="test_json" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="../inc/jquery-1.4.1.js" type="text/javascript"></script> <script src="../inc/jquery-1.4.1-vsdoc.js" type="text/javascript"></script> </head> <body> <form id="form1" runat="server"> <div> </div> </form> <script type="text/javascript"> $(document).ready(function () { // ashx 方法调用 $.ajax({ type: "post", contentType: "application/json", url: "jsontest.ashx", data: {}, dataType: "json", success: function (result) { // var json = eval(data); // alert(result[0].Name); for (var i = 0; i < result.length; i++) { document.writeln("Name" + i + "=" + result[i].Name + "<br/>Age" + i + "=" + result[i].Age + "<br/>Date" + i + "=" + result[i].Birthday + "<br/>"); } } }); }); </script> </body> </html>
然后运行结果
后来我又想到用Webservice 作为数据来源 于是
新建一个 webservice 命名为JsonService.asmx
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using Newtonsoft.Json; using Newtonsoft.Json.Converters; /// <summary> ///JsonService 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 [System.Web.Script.Services.ScriptService] public class JsonService : System.Web.Services.WebService { public JsonService () { //如果使用设计的组件,请取消注释以下行 //InitializeComponent(); } [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod] public string Jsonstr() { Person info = new Person(); info.Name = "a"; info.Age = 18; info.Birthday = Convert.ToDateTime("1988-05-03 12:12:12"); Person info1 = new Person(); info1.Name = "b"; info1.Age = 13; info1.Birthday = Convert.ToDateTime("1988-05-20"); List<Person> list = new List<Person>(); list.Add(info); list.Add(info1); string json = JsonConvert.SerializeObject(list); return json; } } public class Person { public string Name { get; set; } public int Age { get; set; } [JsonConverter(typeof(IsoDateTimeConverter))] public DateTime Birthday { get; set; } }
页面 还是上面那个页面
但是遇到几个问题弄的我头大。。我一开始用ajax 基本之接发 aspx.cs 的没试过用webservice 所以。。。
下面只发 JS 代码:
一开始我写的和调用ashx 的方法一样
$.ajax({ type: "post", contentType: "application/json", // contentType: "application/json;utf-8", url: "JsonService.asmx/Jsonstr", data: "{}", dataType: "json", success: function (result) { for (var i = 0; i < result.length; i++) { document.writeln("Name" + i + "=" + result[i].Name + "<br/>Age" + i + "=" + result[i].Age + "<br/>Date" + i + "=" + result[i].Birthday + "<br/>"); } } });
显然是不对的 result.length 为 undefined 用firedebug 发现
result: Object { d="[{"Name":"a","Age":18,"..."1988-05-20T00:00:00"}]"}
result 是这个结果。那么显然不对
后来把 result改成result.d
alert 出来 是那个json 串没错。。 于是又试下去
但是问题又来了打印出来 100多条数据而且 值都是 undefined 再调试看了一下。。result.d.length就为111
那么result.d这个值就不是 json 而是一个字符串
"[{"Name":"a","Age":18,"Birthday":"1988-05-03T12:12:12"},{"Name":"b","Age":13,"Birthday":"1988-05-20T00:00:00"}]"
又去网上搜了一下。发现要加一个转换 eval();
但是这个串直接这么转换还是不对。。后来找到原因了换成下面的 转换方式就正确了
var json = eval('(' + result.d + ')');
这个我也不知道是什么原理 反正弄出来了!
下面贴上正确的代码 顺便还调用了 默认的 Hello word
// WebService 方法调用 $.ajax({ type: "POST", contentType: "application/json", dataType: "json", url: "JsonService.asmx/HelloWorld", data: {}, error: function () { alert("error"); }, success: function (result) { alert(result.d); //document.write(result.d); } }); $.ajax({ type: "post", contentType: "application/json", // contentType: "application/json;utf-8", url: "JsonService.asmx/Jsonstr", data: "{}", dataType: "json", success: function (result) { // alert(result.d); var json = eval('(' + result.d + ')'); for (var i = 0; i < json.length; i++) { document.writeln("Name" + i + "=" + json[i].Name + "<br/>Age" + i + "=" + json[i].Age + "<br/>Date" + i + "=" + json[i].Birthday + "<br/>"); } } });
学了第一步啊。。
相关文章推荐
- .net序列化 - Newtonsoft(Json.Net)简单应用
- 关于 ASP.net + JQuery + JQGrid + JSON.net 的简单应用(一)
- Json.NET简单应用
- 关于 ASP.net + JQuery + JQGrid + JSON.net 的简单应用(二)
- 关于 ASP.net + JQuery + JQGrid + JSON.net 的简单应用(三)
- 关于 ASP.net + JQuery + JQGrid + JSON.net 的简单应用(一)
- ASP.NET简单实现APP中用户个人头像上传和裁剪
- fastJson 笔记-简单应用
- net.sf.json中修改和过滤已生成的json数据的简单讲解
- 简单ASP.NET AJAX 客户端应用:用JS直接调用WebServices方法
- 算法之个人总结:Hash表之简单应用
- ASP.NET Cookies简单应用 [ASP.NET | Cookies]
- Json.NET 之 Json的简单介绍
- c# .net windows消息队列简单应用示例
- asp.net 2.0 个人认为处理网站全局错误最简单的方法
- asp.net+jQuery应用JSON实现无刷新三级联动实例(转)
- ASP.NET简单应用
- 学习Spring.Net:1.简单的应用之控制台
- Synchronization Service for ADO.NET 实例:简单双向同步应用
- 【原创】 ASP.NET C#反射简单实例应用