.net处理JSON简明教程
.net处理JSON简明教程
Json.Net是.net中的一种流行的高性能的JSON框架。
特点
- 灵活的JSON序列化转化.net对象为JSON字符串。和把JSON字符串转换为.net对象。
- 手动读写JSON的Linq to JSON
- 比.net内置的JSON序列化程序更高的性能和速度。
- 便于读写的JSON
- 从XML中读取或写入JSON
- 支持Silverlight和Windows phone.
当你读写的JSON与.net类紧密关联时,JSON序列化程序是一个不错的选择。JSON序列化程序将自动读写相关类的JSON。
如果你只对JSON里面的数据感兴趣、你没有与JSON相关联的.net类或者JSON数据与你的类没有任何关系,你需要从对象中手动读写数据。以上各种情况下,你可以使用LINQ To JSON. LINQ To JSON 允许你在.net中更容易的读取、写入、修改JSON数据。
Download Json.NET from CodePlex or install using NuGet。
PM> Install-Package Newtonsoft.Json
JSON.net下载地址列表
http://json.codeplex.com/releases/view/74287
提供JSON.NET 4.0 Release 3版本地址
http://json.codeplex.com/releases/view/74287#DownloadId=287841
更多JSON详细信息,请查看: http://james.newtonking.com/projects/json-net.aspx
先构造一个简单的类employee
Public class employee{
Public string eid{get;set;}
Public string ename{get;set;}
Public string esex{get;set;}
Public datetime birthday{get;set;}
}
JSON序列化与反序列化的方案
- 使用Json.Net 处理JSON序列化与反序列化
序列化方法
private string JsonSerialize(employee emp) {
return Newtonsoft.Json.JsonConvert.SerializeObject(emp);
}
反序列化方法
private employee JsonDeserialize(string json) {
return (employee)(Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(employee)));
}
- 使用JavaScriptSerializer进行序列化、反序列化
序列化方法
private string JsonSerialize (employee emp) {
return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(emp);
}
反序列化
Private string JsonDeserialize (string json){
return (employee)(newSystem.Web.Script.Serialization.JavaScriptSerializer().Deserialize(json,typeof(employee)));
}
- 通过类DataContractJsonSerializer对JSON序列化和反序列化
序列化方法
private string JsonSerialize (employee emp) {
System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs = newSystem.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(employee));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
dcjs.WriteObject(ms, emp);
string json = System.Text.Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return json;
}
反序列化方法
private employee JsonDeserialize (string json) {
System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs = newSystem.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(employee));
System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(json));
employee obj = (employee)(dcjs.ReadObject(ms));
return obj;
}
- 通过Newtonsoft.Json.Linq.JObject获取JSON数据
private void LinqJson(string json) {
JObject obj = Newtonsoft.Json.Linq.JObject.Parse(json);
//获取全部数据值
foreach (JToken token in obj.Values()) {
Response.Write(token.ToString());
}
//获取唯一值
Response.Write(obj["eid"].ToString()+"<br />"); }
- 5、LINQ to JSON Example
string json = @"{
""Name"": ""Apple"",
""Expiry"": new Date(1230422400000),
""Price"": 3.99,
""Sizes"": [
""Small"",
""Medium"",
""Large""
]
}";
JObject o = JObject.Parse(json);
string name = (string)o["Name"];
// Apple
JArray sizes = (JArray)o["Sizes"];
string smallest = (string)sizes[0];
JSON序列化和反序列化日期时间的处理
JSON格式不直接支持日期和时间。DateTime值值显示为"/Date(700000+0500)/"形式的JSON字符串,其中第一个数字(在提 供的示例中为 700000)是 GMT 时区中自 1970年 1 月 1 日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括"+0500"的部分可选,它指示该时间属于Local 类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为Utc。
使用DataContractJsonSerializer的序列化方式对日期格式进行处理,其他的(反)序列化方案的使用方式是相同的。设计思想是通过正则表达式匹配,替换JSON里面的日期数据为正常的日期格式。
序列化方法
private string JsonSerialize (employee emp) {
System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs = newSystem.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(employee));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
dcjs.WriteObject(ms, emp);
string json = System.Text.Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
//替换JSON时间为字符串
string p = @"\\/Date\((\d+)\)\\/";
System.Text.RegularExpressions.MatchEvaluator me = newSystem.Text.RegularExpressions.MatchEvaluator(ConvertJsonDateToDataString);
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(p);
json = regex.Replace(json, me);
return json;
}
private string ConvertJsonDateToDataString(System.Text.RegularExpressions.Match m) {
string result = string.Empty;
DateTime dt = new DateTime(1970,1,1);
dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
dt = dt.ToLocalTime();
result = dt.ToString("yyyy-MM-dd HH:mm:ss");
return result;
}
反序列化方法
private employee JsonDeserialize (string json)
{
string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
System.Text.RegularExpressions.MatchEvaluator me = newSystem.Text.RegularExpressions.MatchEvaluator(ConvertDateStringToJsonDate);
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(p);
json = reg.Replace(json, me);
System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs=newSystem.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(employee));
System.IO.MemoryStream ms=new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(json));
employee emp=(employee)dcjs.ReadObject(ms);
return emp;
}
private string ConvertDateStringToJsonDate(System.Text.RegularExpressions.Match m)
{
string result = string.Empty;
DateTime dt = DateTime.Parse(m.Groups[0].Value);
dt = dt.ToUniversalTime();
TimeSpan ts = dt - DateTime.Parse("1970-1-1");
result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);
return result;
}
转载地址:http://wenqingluomo.blog.163.com/blog/static/7917174020111035956910/
.net处理JSON简明教程的更多相关文章
- appium简明教程
appium简明教程 什么是appium? 下面这段介绍来自于appium的官网. Appium is an open-source tool you can use to automate mobi ...
- OAuth 白话简明教程 3.客户端模式(Client Credentials)
转自:http://www.cftea.com/c/2016/11/6704.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...
- Node.js学习笔记(3):NPM简明教程
Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
- React-Router 中文简明教程(上)
概述 说起 前端路由,如果你用过前端 MV* 框架构建 SPA 应用(单页面应用),对此一定不陌生. 传统开发中的 路由,是由服务端根据不同的用户请求地址 URL,返回不同内容的页面,而前端路由则将这 ...
- nacos、ribbon和feign的简明教程
nacos简明教程 为什么需要nacos? 在微服务架构中,微服务之间经常要相互通信和调用,而且一个服务往往存在多个实例来降低负荷或保证高可用.我们假定A服务要调用B服务,最简单的方式把B服务的地址和 ...
- 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)
小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...
- 2013 duilib入门简明教程 -- 部分bug (11)
一.WindowImplBase的bug 在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题, 1.最大化按钮的样式 ...
- 2013 duilib入门简明教程 -- 部分bug 2 (14)
上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃 如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...
- 2013 duilib入门简明教程 -- 自绘控件 (15)
在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...
随机推荐
- mybatis系列-14-延迟加载
14.1 什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载 ...
- Android 订阅-发布者模式-详解
1.概念简述 Android 简称观察者模式, GoF说道:Observer模式的意图是“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”. 有 ...
- jsp界面项目绝对路径问题
方法一:直接采用绝对路径 (不推荐) 在JSP页面端,获得本项目的绝对地址(如果你的项目叫MyApp,那么获得到的地址就是 http://localhost:8080/MyApp/): 代码如下: & ...
- springMVC的详细步骤配置
使用springMVC也可以代替struts2,当然只是代替业务分发的功能,struts2的一些其他功能它是没有的,不然要struts2有什么用. 下面我用springMVC代替struts2去整合h ...
- win7的centos虚拟机上搭建mysql5.6服务
1 安装包下载 mysql5.6下载地址: http://dev.mysql.com/downloads/mysql/ 这里选择linux版本: navicat11破解版的下载地址: http://d ...
- 【Hadoop代码笔记】Hadoop作业提交之Job初始化
一.概要描述 在上一篇博文中主要描述了JobTracker和其几个服务(或功能)模块的接收到提交的job后的一些处理.其中很重要的一部分就作业的初始化.因为代码片段图的表达问题,本应该在上篇描述的内容 ...
- 【转】Java中只有按值传递,没有按引用传递!
原文链接:http://guhanjie.iteye.com/blog/1683637 今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底 ...
- ZOJ 3810 Pretty Poem 分类: ACM 2015-05-17 14:40 83人阅读 评论(0) 收藏
Pretty Poem Time Limit: 2 Seconds Memory Limit:65536 KB Poetry is a form of literature that uses ...
- OpenXML操作word
OpenXML概述 项目中经常需要操作word,之前的方式是采用COM接口,这个接口很不稳定,经常报错.现在开始采用OpenXML.OpenXML(OOXML)是微软在Office 2007中提出的一 ...
- ACM之数学题
数学题,始终记得,第一次被带飞师大校赛以及省赛,毫无例外的在数学题上卡死....因此,现在开始,有意识的保留遇见的数学题...(下列知识点按遇见先后顺序排列: 1欧拉公式 欧拉公式的用处是,找出小于N ...