`
uule
  • 浏览: 6352872 次
  • 性别: 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形式的数据相互转换的代码,可以拿来直接说用

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

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

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

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

    基于.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。根据项目需求和环境,开发者可以选择最适合的...

    Json.net 全版本新版dll,绝对可用

    - net20:针对 .NET Framework 2.0 设计,这意味着 JSON.NET 具有良好的向后兼容性,可以在较旧的项目中使用。 - net35:对应 .NET Framework 3.5,适合那些由于各种原因无法升级到更高版本的项目。 3. ...

    .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 ...

Global site tag (gtag.js) - Google Analytics