`
uule
  • 浏览: 6349911 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

.net中使用JSON

 
阅读更多

在.NET使用JSON作为数据交换格式

ASP.NET中JSON的序列化和反序列化

三种方式:

使用System.Web.Script.Serialization.JavaScriptSerializer类
System.Web.Script.Serialization.JavaScriptSerializer 类是.NET类库中自带的一种JSON序列化实现,在.NET Framework3.5及以后版本中可以使用这个类,这个类位于System.Web.Extensions.dll中,使用这个类是必须添加对这个 dll的引用。
下面的代码是使用JavaScriptSerializer进行序列化和反序列化的例子:

public static void JavaScriptSerializerDemo()
{
    User user = new User { UserId = 1, UserName = "李刚", CreateDate = DateTime.Now.AddYears(-30),Birthday=DateTime.Now.AddYears(-50), Priority = Priority.Highest, Salary = 500000 };
    //JavaScriptSerializer类在System.Web.Extensions.dll中,注意添加这个引用
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    //JSON序列化
    string result=serializer.Serialize(user);
    Console.WriteLine("使用JavaScriptSerializer序列化后的结果:{0},长度:{1}", result, result.Length);
    //JSON反序列化
    user = serializer.Deserialize<User>(result);
    Console.WriteLine("使用JavaScriptSerializer反序列化后的结果:UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority);

}

 使用System.Runtime.Serialization.Json.DataContractJsonSerializer类
System.Runtime.Serialization.Json.DataContractJsonSerializer 类位于System.ServiceModel.Web.dll中,使用这个类时除了需要添加对System.ServiceModel.Web.dll 的引用之外,还需要添加System.Runtime.Serialization.dll的引用,注意这个类也是在.NET Framework3.5及以后版本中可以使用。

 

使用Newtonsoft.Json.JsonConvert类
Newtonsoft.Json.JsonConvert类是非微软提供的一个JSON序列化和反序列的开源免费的类库(下载网址是:http://www.codeplex.com/json/), 它提供了更灵活的序列化和反序列化控制,并且如果你的开发环境使用的是.NET Framework3.5及以后版本的话,你就可以使用Linq to JSON,这样一来面对一大段的数据不必一一解析,你可以使用Linq to JSON解析出你关心的那部分即可,非常方便。

 

 

JSON序列化和反序列化后的日期处理:

     JSON格式不直接支持日期和时间。DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,其中第一个数字(在提 供的示例中为 700000)是 GMT 时区中自 1970 年 1 月 1 日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括“+0500”的部分可选,它指示该时间属于Local 类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为Utc。

     修改Person类,添加LastLoginTime:

   1: public class Person
   2: {
   3:     public string Name { get; set; }
   4:     public int Age { get; set; }
   5:     public DateTime LastLoginTime { get; set; }
   6: }
   1: Person p = new Person();   2: p.Name = "张三";
   3: p.Age = 28;
   4: p.LastLoginTime = DateTime.Now;
   5:  
   6: string jsonString = JsonHelper.JsonSerializer<Person>(p);

     序列化结果:

{"Age":28,"LastLoginTime":"\/Date(1294499956278+0800)\/","Name":"张三"}
 

     1 、在后台使用正则表达式对其替换处理。修改JsonHelper:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Web;
   5: using System.Runtime.Serialization.Json;
   6: using System.IO;
   7: using System.Text;
   8: using System.Text.RegularExpressions;
   9:  
  10: /// <summary>
  11: /// JSON序列化和反序列化辅助类
  12: /// </summary>
  13: public class JsonHelper
  14: {
  15:     /// <summary>
  16:     /// JSON序列化
  17:     /// </summary>
  18:     public static string JsonSerializer<T>(T t)
  19:     {
  20:         DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
  21:         MemoryStream ms = new MemoryStream();
  22:         ser.WriteObject(ms, t);
  23:         string jsonString = Encoding.UTF8.GetString(ms.ToArray());
  24:         ms.Close();
  25:         //替换Json的Date字符串
  26:         string p = @"\\/Date\((\d+)\+\d+\)\\/";
  27:         MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
  28:          Regex reg = new Regex(p);
  29:         jsonString = reg.Replace(jsonString, matchEvaluator);
  30:         return jsonString;
  31:     }
  32:  
  33:     /// <summary>
  34:     /// JSON反序列化
  35:     /// </summary>
  36:     public static T JsonDeserialize<T>(string jsonString)
  37:     {
  38:         //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式
  39:         string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
  40:         MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
  41:         Regex reg = new Regex(p);
  42:         jsonString = reg.Replace(jsonString, matchEvaluator);
  43:         DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
  44:         MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
  45:         T obj = (T)ser.ReadObject(ms);
  46:         return obj;
  47:     }
  48:  
  49:     /// <summary>
  50:     /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串
  51:     /// </summary>
  52:     private static string ConvertJsonDateToDateString(Match m)
  53:     {
  54:         string result = string.Empty;
  55:         DateTime dt = new DateTime(1970,1,1);
  56:         dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
  57:         dt = dt.ToLocalTime();
  58:         result = dt.ToString("yyyy-MM-dd HH:mm:ss");
  59:         return result;
  60:     }
  61:  
  62:     /// <summary>
  63:     /// 将时间字符串转为Json时间
  64:     /// </summary>
  65:     private static string ConvertDateStringToJsonDate(Match m)
  66:     {
  67:         string result = string.Empty;
  68:         DateTime dt = DateTime.Parse(m.Groups[0].Value);
  69:         dt = dt.ToUniversalTime();
  70:         TimeSpan ts = dt - DateTime.Parse("1970-01-01");
  71:         result = string.Format("\\/Date({0}+0800)\\/",ts.TotalMilliseconds);
  72:         return result;
  73:     }
  74: }

       序列化Demo:

   1: Person p = new Person();
   2: p.Name = "张三";
   3: p.Age = 28;
   4: p.LastLoginTime = DateTime.Now;
   5:  
   6: string jsonString = JsonHelper.JsonSerializer<Person>(p);

       运行结果:

{"Age":28,"LastLoginTime":"2011-01-09 01:00:56","Name":"张三"}

       反序列化Demo:

string json = "{\"Age\":28,\"LastLoginTime\":\"2011-01-09 00:30:00\",\"Name\":\"张三\"}";
p=JsonHelper.JsonDeserialize<Person>(json);

        运行结果:

image

     在后台替换字符串适用范围比较窄,如果考虑到全球化的有多种语言还会更麻烦。

     2、利用JavaScript处理

   1: function ChangeDateFormat(jsondate) {
   2:     jsondate = jsondate.replace("/Date(", "").replace(")/", "");
   3:     if (jsondate.indexOf("+") > 0) {
   4:         jsondate = jsondate.substring(0, jsondate.indexOf("+"));
   5:     }
   6:     else if (jsondate.indexOf("-") > 0) {
   7:         jsondate = jsondate.substring(0, jsondate.indexOf("-"));
   8:     }
   9:  
  10:     var date = new Date(parseInt(jsondate, 10));
  11:     var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
  12:     var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
  13:     return date.getFullYear() + "-" + month + "-" + currentDate;
  14: }

      简单Demo :

ChangeDateFormat("\/Date(1294499956278+0800)\/");

     结果:

2011-1-8

 

 

分享到:
评论

相关推荐

    【ASP.NET编程知识】JSON在ASP.NET中使用方法.docx

    在ASP.NET中使用Json.NET进行JSON数据交互的基本步骤如下: 1. **引入Newtonsoft.Json库**: 首先,需要将Newtonsoft.Json.dll和Newtonsoft.Json.XML添加到项目的bin目录,并在项目中引用该库。 2. **创建.NET对象*...

    VB.net DataSet和JSON形式的数据相互转换

    VB.net中DataSet和JSON形式的数据相互转换的代码,可以拿来直接说用

    C#.Net2.0解析Json,精简版的Newtonsoft.Json.dll,JsonReader,JsonSerializer(Json.Net)

    也可以直接将类添加到项目中使用,非常方便 再次声明,只能读取和解析json数据哦 常用的调用方法: JsonReader reader = new JsonReader(new StringReader(jsonText)); JsonSerializer ser = new JsonSerializer(); ...

    VB.NET XML和JSON序列化与反序列化

    在VB.NET中,处理JSON通常使用的是`System.Web.Script.Serialization`或第三方库如Newtonsoft.Json(Json.NET)。 1. **JSON序列化**:使用Json.NET,可以如下序列化对象: ```vbnet Dim jsonSerializer As New ...

    基于.NET3.5的JSON操作

    在.NET框架中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web服务与客户端之间的数据传输。在.NET 3.5中,虽然没有内置的JSON支持,但可以通过第三方库来实现JSON的序列化和反序列化。...

    JSON.NET Newtonsoft.Json .NET2.0

    JSON.NET .NET2.0版本

    .net对象转json数据的类库

    .net对象转json数据的类库。

    asp.net Core Post Json方式给控制器Action传参并拦截丢失参数等错误信息

    在action的传参上加入FromJsonKey属性即可在传入的json中传入参数,如果传入的json中不存在相应键即报错 [HttpPost] public IActionResult Index([FromJsonKey]int page) { return Json(page); } [HttpPost()]...

    .net core读取json配置文件示例源码

    在.NET Core中,读取JSON配置文件是常见的任务,尤其对于构建可配置的应用程序来说更是不可或缺。本示例源码展示了如何在.NET Core控制台应用程序中实现这一功能。JSON(JavaScript Object Notation)配置文件因其...

    asp.net json格式数据

    - ASP.NET MVC和Web Forms都支持使用JSON数据源进行数据绑定,如在GridView或ListView控件中展示来自服务器的JSON数据。 了解并熟练掌握以上知识点,将有助于在ASP.NET环境中有效地利用JSON进行数据交换,提升Web...

    Newtonsoft.Json.Net 4.0下载.rar

    在压缩包中的`Newtonsoft.Json.Net20.dll`文件是Newtonsoft.Json库的.NET 2.0版本的编译结果,它包含所有上述功能的实现。如果你的项目需要兼容.NET 2.0框架,这个版本的库是必要的。 总之,Newtonsoft.Json.Net ...

    .net Newtonsoft.Json 4.0 release

    -Flexible JSON serializer to convert .NET objects to JSON and back again -LINQ to JSON for manually reading and writing JSON -High performance, faster than .NET's built-in JSON serializers -Writes ...

    一个基于C#+asp.net实现的Json Web Editor 字符串编辑工具源码及例子

    在使用这个C#+ASP.NET实现的JSON Web Editor时,开发者可以学习到如何在C#中处理JSON数据,如何利用ASP.NET构建Web服务或应用程序,以及如何设计用户友好的编辑界面。对于想要提升Web开发技能,特别是与JSON数据打...

    Json.net在线解析Json示例

    通过运行这个项目,你可以看到如何在实际环境中使用Json.NET处理JSON数据。这不仅包括基本的序列化和反序列化,还可能包含更复杂的操作,如使用LINQ to JSON查询和自定义转换器。 总之,Json.NET为.NET开发者提供了...

    edoJs与.net交互(json)

    6. **EdoJsDemo**:这个压缩包中的"EdoJsDemo"可能包含了一个完整的示例项目,展示如何在实际开发中使用edoJs与.NET进行JSON交互。可能包括了JavaScript代码示例、ASP.NET Web服务或API接口,以及相关的配置文件等。...

    ASP.NET DataTable与Json互转

    总结,ASP.NET中DataTable与JSON之间的转换涉及到多种方法,包括使用内置的JavaScriptSerializer,或者依赖于第三方库如Json.NET,以及.NET Core的System.Text.Json。根据项目需求和环境,开发者可以选择最适合的...

    .net将DataSet集合转成Json形式

    将查询来的DataSet转成JSon形式,接收时注意,string和int字段都是用String形式的接受

    asp.net json使用

    它基于JavaScript语法,但不依赖于JavaScript,因此可以在任何支持JSON的环境中使用。JSON对象由键值对组成,键用双引号包围,值可以是字符串、数字、布尔值、数组、null或者另一个JSON对象。 2. ASP.NET中的JSON...

    Json.NET 6.0 R3 For.NET(2.0-4.5)

    Json.NET Json.NET is a popular high-performance JSON framework for .NET Features Flexible JSON serializer for converting between .NET objects and JSON LINQ to JSON for manually reading and writing ...

    基于.NET2.0 JSON转换对象

    在.NET 2.0框架中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于在客户端和服务器之间传输数据。由于其简洁、易于读写的特点,JSON已经成为了Web服务通信的标准之一。本篇文章将深入探讨...

Global site tag (gtag.js) - Google Analytics