序列化一个对象

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基本使用的更多相关文章

  1. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

  2. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  4. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  5. .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    .NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...

  6. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  7. JSON.parse()和JSON.stringify()

    1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...

  8. json与JavaScript对象互换

    1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...

  9. .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

    去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...

  10. WebApi接口 - 响应输出xml和json

    格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...

随机推荐

  1. Android - 警告:it is always overridden by the value specified in the Gradle build script

    警告:it is always overridden by the value specified in the Gradle build script 本文地址: http://blog.csdn. ...

  2. python3使用smtplib发电子邮件

    smtplib模块smtp简单邮件传输协议client实现.对于多功能性,有时,当你要发送带附件的邮件或图片,使用email.mime加载内容. 码,如以下: import smtplib impor ...

  3. kprobe 内核模块

    代码来自于linux内核sample/kprobe kprobe_example.c /* * NOTE: This example is works on x86 and powerpc. * He ...

  4. DataTable相关操作,筛选,取前N条数据,获取指定列数据

    DataTable相关操作,筛选,取前N条数据,获取指定列数据2013-03-12 14:50 by Miracle520, 2667 阅读, 0 评论, 收藏, 编辑 1 #region DataT ...

  5. javascript日历插件

    原文:javascript日历插件 javascript日历插件 最近在尝试着写javascript日历插件,所以也到github上看国外人日历源码,或者国内人写的好点的,也在研究点,虽然看到网上有一 ...

  6. android rawquery和query对照

    Cursor cursor = db.rawQuery("select name from *** where id=? ", new String[]{"1" ...

  7. Fizzler

    Fizzler 抓取网站数据不再是难事了,Fizzler(So Easy)全能搞定 首先从标题说起,为啥说抓取网站数据不再难(其实抓取网站数据有一定难度),SO EASY!!!使用Fizzler全搞定 ...

  8. openwrt驱动与应用程序的联系

    应用程序与驱动之间需要进行命令的传递,因而它们之间需要共同定义一套双方都可以识别的数据结构,实际使用时它们include的是名字和内容相同但位置不同的头文件. 比如spi_gpio_ad7193.h这 ...

  9. 解决wps for linux 中文输入法光标不跟随的问题

    需要安装qt4-qtconfig和ibus-qt4,安装ibus-qt4之后才能在qt4-qtconfig“界面”选项卡默认输入法选项中看到ibus,选定它,然后设置XIM输入风格为光标跟随风格,保存 ...

  10. JavaScript一个类继承中实现

    JavaScript类是默认原型对象继承: var Person = function() { this.name = "people"; this.hello = functio ...