JSON.NET基本使用
序列化一个对象
public static string ToJson( object obj)
{
string json = JsonConvert .SerializeObject(obj);
return json;
}
反序列化一个字符串到对象
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];
// Small
json.net中的时间处理
json序列化DateTime对象时,输入的格式是这样的 \/Date(1377853149258+0800)\/ 。可读性不好,使用开源库Json.Net时可以解决这一问题。
使用Json.Net的默认序列化输入也是\/Date(1377853149258+0800)\/ 。但Json.Net提供了2个JsonConverter,可以对时间进行格式化输出:IsoDateTimeConverter 和JavaScriptDateTimeConverter 。
如果对这2个converter的输出还不满意,可以自定义时间的格式化输出。如下是代码示例:
public class TestClass
{
public string Name { get; set; }
public DateTime Date { get; set; }
} public class class1
{
public void Test001()
{
TestClass obj = new TestClass() { Name = "name", Date = DateTime.Now }; //标准格式
Console.WriteLine(JsonConvert.SerializeObject(obj)); //isoDateTime格式格式
Console.WriteLine(JsonConvert.SerializeObject(obj, new IsoDateTimeConverter())); //JavaScriptDateTime格式
Console.WriteLine(JsonConvert.SerializeObject(obj, new JavaScriptDateTimeConverter())); //自定义时间格式
IsoDateTimeConverter iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.ffff"; Console.WriteLine(JsonConvert.SerializeObject(obj, iso));
} }
------ Test started: Assembly: Alibaba.Outsource.Domain.Application.Tests.dll ------
{"Name":"name","Date":"\/Date(1377853149258+0800)\/"}
{"Name":"name","Date":"2013-08-30T16:59:09.2583668+08:00"}
{"Name":"name","Date":new Date(1377853149258)}
{"Name":"name","Date":"2013-08-30 16:59:09.2583"}
1 passed, 0 failed, 0 skipped, took 0.32 seconds (Ad hoc).
如下是反序列化过程:
public void Test002()
{
TestClass obj = new TestClass() { Name = "name", Date = DateTime.Now }; //标准格式
string defaultString = JsonConvert.SerializeObject(obj);
//Console.WriteLine(defaultString); //isoDateTime格式格式
string isoString = JsonConvert.SerializeObject(obj, new IsoDateTimeConverter());
//Console.WriteLine(isoString); //JavaScriptDateTime格式
string javaScriptString = JsonConvert.SerializeObject(obj, new JavaScriptDateTimeConverter());
//Console.WriteLine(javaScriptString); //自定义时间格式
IsoDateTimeConverter iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.ffff"; string customString = JsonConvert.SerializeObject(obj, iso);
Console.WriteLine(customString); //参数中带JsonConverter
TestClass obj2 = JsonConvert.DeserializeObject<TestClass>(customString, iso);
Console.WriteLine(obj2.Name);
Console.WriteLine(obj2.Date); //参数中不带JsonConverter
TestClass obj3 = JsonConvert.DeserializeObject<TestClass>(customString);
Console.WriteLine(obj3.Name);
Console.WriteLine(obj3.Date); }
输出:当时间格式是yyyy-MM-dd HH:mm:ss.ffff时,参数中带和不带jsonConverter都是可以成功序列化的
------ Test started: Assembly: Alibaba.Outsource.Domain.Application.Tests.dll ------
{"Name":"name","Date":"2013-08-30 17:12:47.5933"}
name
2013/8/30 17:12:47
name
2013/8/30 17:12:47
1 passed, 0 failed, 0 skipped, took 0.36 seconds (Ad hoc).
那是不是所有的自定义时间格式,在反序列化时,都可以不用带JsonConverter呢?答案是否定的。
针对下面的2中自定义时间格式,如果反序列化时,参数中不带上我们自定义的JsonConverter,第一个是可以的。第二个是不行的。当反序列化第二个时,会抛出异常。
iso2.DateTimeFormat = "yyyy年MM月dd日 HH时mm分ss秒";//可以正常反序列化
iso3.DateTimeFormat = "yyyy年哈哈MM月哈哈dd日哈哈 HH哈哈mm哈哈ss哈哈" ;//反序列化时抛出异常
可见,如果自定义的时间格式,刚好是C#可以解析的标准格式,那么可以在反序列化的时候,不用加上自定义Converter。否则,需要加上Converter。
JSON.NET基本使用的更多相关文章
- 使用TSQL查询和更新 JSON 数据
JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- .NET Core系列 : 2 、project.json 这葫芦里卖的什么药
.NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
一.事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...
- JSON.parse()和JSON.stringify()
1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...
- json与JavaScript对象互换
1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...
- .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
- WebApi接口 - 响应输出xml和json
格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...
随机推荐
- Tyvj P1015 公路骑 (DP)
叙述性说明 Description 一个特殊的单行道都在每公里公交车站.们乘坐汽车的公里使来付费. 比如例子的第一行就是一个费用的单子. 没有一辆车子行驶超过10公里.一个顾客打算行驶n公里(1 ...
- vS2010 列表控件 加入右键菜单
1.首先,就需要信息加入权限控制,例如,下面的对话框弹出 2,例如以下图选择须要的消息响应,这里选择NM_RCLICK 消息. 3,加入例如以下代码 </pre><pre name= ...
- struts2的Action该方法不能去
最近做的一个特征,使用struts2,input标签内容,并与相应的内容背景的实体类,当提交方法,无法进入action该方法和程序没有报错被,检验N通方法还没有找到,查找终于找到了,它是input标签 ...
- js 里面 写 C# 代码 遇到的问题
js 代码块 必须放置在 body 里面
- IOS中 init和initialize
一.init和initialize 1.方法类型 1> init属于对象方法,-开头 2> initialize属于类方法,+开头 2.调用时刻 1> init:每个对象初始化的时候 ...
- 初探Django Admin(一)
前面的文章记录了django项目的一些操作,插入数据部分是手动在shell中操作的,如果能有一个图形界面来管理我们的数据,那该多好~ Django已经想到大家会需要这个功能,通过简单的配置,就能使用d ...
- OCP-1Z0-051-题目解析-第5题
5. Which SQL statements would display the value 1890.55 as $1,890.55? (Choose three .) A. SELECT TO_ ...
- [译]Java 设计模式之备忘录
(文章翻译来自Java Design Pattern: Memento) memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态. 在将来时空旅行将成为显示 ...
- 扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip
原文:扩展ToolBarManager.ListView和Grid控件以实现气球式的ToolTip infragistics是全球领先的UI工具和用户体验的专家,Infragistics开发了一系列的 ...
- SQL远程备份
原文:SQL远程备份 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ====================================== ...