序列化一个对象

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. 安德鲁斯 建立与各种听众自己定义的ScrollView

    === 建立与各种听众自己定义的ScrollView === 尽管安卓5.1已经release, 可是ScrollView的封装和对外API依然少的可怜, 尽管它优化得非常好了. 所以问题来了: Sc ...

  2. 基于注解Spring MVC综合Hibernate(需要jar包,spring和Hibernate整合配置,springMVC组态,重定向,)批量删除

    1.进口jar 2.web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app ver ...

  3. 64bit Centos6.4编hadoop-2.5.1

    64bit Centos6.4编hadoop-2.5.1   1.说明 a)       因为从apache下载下来的tar.gz包是用32 bit编译的,全部假设用Linux 64作为hadoop的 ...

  4. linux_设置开机自启动程序脚本

    设置开机自启动

  5. Java8的日期和时间的库20经常使用的演示样本

    除了lambda表达,stream以及从一些小的改进,Java 8还推出了新的日期和时间API,在本教程中,我们将展示通过几个简单的任务来学习如何使用示例Java 8这组API.Java至今.日历和时 ...

  6. HDU 5055 Bob and math problem(结构体)

    主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5055 Problem Description Recently, Bob has been think ...

  7. IOS程序创建view

    在IOS程序中创建view有六种方式 首先创建一个GLViewController类,继承UIViewController. 然后进入GLAppDelegate.m,在- (BOOL)applicat ...

  8. git合并远端分支到本地分支的两种方式

    作者:zhanhailiang 日期:2014-11-21 在使用版本号工具提交改动之前,都须要通过update先将本地代码更新到最新版本号.SVN通过svn update就能够实现,那么git怎样实 ...

  9. HDU 1484 Basic wall maze (dfs + 记忆)

    Basic wall maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  10. Java发送get及post请求工具方法

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...