三种方式:
使用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);
运行结果:
在后台替换字符串适用范围比较窄,如果考虑到全球化的有多种语言还会更麻烦。
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.NET进行JSON数据交互的基本步骤如下: 1. **引入Newtonsoft.Json库**: 首先,需要将Newtonsoft.Json.dll和Newtonsoft.Json.XML添加到项目的bin目录,并在项目中引用该库。 2. **创建.NET对象*...
VB.net中DataSet和JSON形式的数据相互转换的代码,可以拿来直接说用
在VB.NET中,处理JSON通常使用的是`System.Web.Script.Serialization`或第三方库如Newtonsoft.Json(Json.NET)。 1. **JSON序列化**:使用Json.NET,可以如下序列化对象: ```vbnet Dim jsonSerializer As New ...
也可以直接将类添加到项目中使用,非常方便 再次声明,只能读取和解析json数据哦 常用的调用方法: JsonReader reader = new JsonReader(new StringReader(jsonText)); JsonSerializer ser = new JsonSerializer(); ...
在.NET框架中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web服务与客户端之间的数据传输。在.NET 3.5中,虽然没有内置的JSON支持,但可以通过第三方库来实现JSON的序列化和反序列化。...
JSON.NET .NET2.0版本
.net对象转json数据的类库。
在action的传参上加入FromJsonKey属性即可在传入的json中传入参数,如果传入的json中不存在相应键即报错 [HttpPost] public IActionResult Index([FromJsonKey]int page) { return Json(page); } [HttpPost()]...
在.NET Core中,读取JSON配置文件是常见的任务,尤其对于构建可配置的应用程序来说更是不可或缺。本示例源码展示了如何在.NET Core控制台应用程序中实现这一功能。JSON(JavaScript Object Notation)配置文件因其...
- ASP.NET MVC和Web Forms都支持使用JSON数据源进行数据绑定,如在GridView或ListView控件中展示来自服务器的JSON数据。 了解并熟练掌握以上知识点,将有助于在ASP.NET环境中有效地利用JSON进行数据交换,提升Web...
在压缩包中的`Newtonsoft.Json.Net20.dll`文件是Newtonsoft.Json库的.NET 2.0版本的编译结果,它包含所有上述功能的实现。如果你的项目需要兼容.NET 2.0框架,这个版本的库是必要的。 总之,Newtonsoft.Json.Net ...
-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#中处理JSON数据,如何利用ASP.NET构建Web服务或应用程序,以及如何设计用户友好的编辑界面。对于想要提升Web开发技能,特别是与JSON数据打...
通过运行这个项目,你可以看到如何在实际环境中使用Json.NET处理JSON数据。这不仅包括基本的序列化和反序列化,还可能包含更复杂的操作,如使用LINQ to JSON查询和自定义转换器。 总之,Json.NET为.NET开发者提供了...
6. **EdoJsDemo**:这个压缩包中的"EdoJsDemo"可能包含了一个完整的示例项目,展示如何在实际开发中使用edoJs与.NET进行JSON交互。可能包括了JavaScript代码示例、ASP.NET Web服务或API接口,以及相关的配置文件等。...
总结,ASP.NET中DataTable与JSON之间的转换涉及到多种方法,包括使用内置的JavaScriptSerializer,或者依赖于第三方库如Json.NET,以及.NET Core的System.Text.Json。根据项目需求和环境,开发者可以选择最适合的...
- net20:针对 .NET Framework 2.0 设计,这意味着 JSON.NET 具有良好的向后兼容性,可以在较旧的项目中使用。 - net35:对应 .NET Framework 3.5,适合那些由于各种原因无法升级到更高版本的项目。 3. ...
将查询来的DataSet转成JSon形式,接收时注意,string和int字段都是用String形式的接受
它基于JavaScript语法,但不依赖于JavaScript,因此可以在任何支持JSON的环境中使用。JSON对象由键值对组成,键用双引号包围,值可以是字符串、数字、布尔值、数组、null或者另一个JSON对象。 2. ASP.NET中的JSON...
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 ...