摘自: http://www.cnblogs.com/jams742003/archive/2009/12/24/1631587.html

通过属性标签自定义JSON序列化

JsonObjectAttribute:类修饰标签,用于控制类如何被序列化为一个json对象

JsonArrayAttribute:集合修饰标签,用于控制集合如何被序列化为一个json对象

JsonPropertyAttribute:域和属性修饰标签,用于控制它们如何被序列化为一个json对象中的属性

JsonConverterAttribute:类,域,属性修饰标签,用于指定序列化期间的转换器

示例代码:

[JsonObject(MemberSerialization.OptIn)]

public class Customer

{

[JsonProperty(PropertyName="ID")]

public int Unid { get; set; }

[JsonProperty]

public string CustomerName { get; set; }

[JsonProperty]

[JsonConverter(typeof(IsoDateTimeConverter))]

public DateTime CreateTime { get; set; }

public string Memo { get; set; }

}

JsonObjectAttribute

这个标签的成员序列化标志指定成员序列化是opt-in(要序列化的成员必须带有JsonProperty或DataMember标签)还是opt-out(默认所有的都会序列化,但通过JsonIgnoreAttribute标签可以忽略序列化。opt-out是json.net默认的)。

JsonPropertyAttribute

允许被序列化的成员自定义名字。这个标签同时标示出:在成员序列化设置为opt-in的时候,成员会被序列化。

JsonIgnoreAttribute

忽略域或属性的序列化

JsonConverterAttribute

用于指派转换对象的JsonSerializer。

这个标签可以修饰类或类成员。用于修饰类时,通过此标签指派的JsonConverter会被设置为序列化类的默认方式。用于修饰属性或域成员时,被指派的JsonConverter会序列化它们的值。

序列化日期

json中的日期是困难的。这个问题来源于json细则本身,因为在json中没有日期的原义句法。这个细则包括对象,数组,字符串,整型和浮点,但它没有对日期定义相关的标准。在json.net中用于日期的默认的格式与微软:“\/Date(1198908717056)\/”这个一样。

DateTime JsonConverters

因为在json中没有关于日期的标准,在系统间的互操作过程中出现了大量不同的格式。幸运的是json.net提供了用于读写自定义日期格式的解决方案:JsonConverters。一个json转换器用于指定一种类型如何被序列化。

public class LogEntry

{

public string Details { get; set; }

public DateTime LogDate { get; set; }

}

public void WriteJsonDates()

{

LogEntry entry = new LogEntry

{

LogDate = new DateTime(2009, 2, 15, 0, 0, 0, DateTimeKind.Utc),

Details = "Application started."

};

string defaultJson = JsonConvert.SerializeObject(entry);

// {"Details":"Application started.","LogDate":"\/Date(1234656000000)\/"}

string javascriptJson = JsonConvert.SerializeObject(entry, new JavaScriptDateTimeConverter());

// {"Details":"Application started.","LogDate":new Date(1234656000000)}

string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());

// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}

}

JavaScriptDateTimeConverter

这个来自json.net的转换器是两种日期转换器之一。它是把日期序列化为一个js日期对象。

new Date(1234656000000)

IsoDateTimeConverter

这种转换器把日期序列化为一个ISO8601格式的字符串。

"2009-02-15T00:00:00Z"

这个类有一个日期格式化属性,用于自定义其它的格式字符串。

Json.net说法——(一)修饰标签,日期序列化的更多相关文章

  1. 通过自己定义MVC的Controller的Json转换器解决日期序列化格式问题

    今日,在MVC框架下使用EasyUI的datagrid载入数据时,服务端返回的Json日期格式为 /Date(1433088000000+0800)/ .须要client进一步转换.并且也不符合Eas ...

  2. JavaScriptSerializer中日期序列化问题解决方案

    JavaScriptSerializer中日期序列化问题解决方案 直接进入主题: class Student { public int age { get; set; } public DateTim ...

  3. MVC 修饰标签

    MVC中的修饰标签有很多用途.它以修饰标签形式应用在控制器或控制器中的动作上. 最先想到的就是AcceptVerbs标签,在创建的时候,如果导航到创建视图,但不创建,则: public ActionR ...

  4. PHPCMS V9调用时间标签 |日期时间格式化

    PHPCMS V9 如何调用时间标签,下面分享常见的调用时间标签 |日期时间格式化  1.日期时间格式化显示: a标准型:{date('Y-m-d H:i:s', $rs['inputtime'])} ...

  5. 使用 JSON.parse 反序列化 ISO 格式的日期字符串, 将返回Date格式对象

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)

    js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...

  7. C# Newtonsoft.Json JObject移除属性,在序列化时忽略

    原文 C# Newtonsoft.Json JObject移除属性,在序列化时忽略 一.针对 单个 对象移除属性,序列化时忽略处理 JObject实例的 Remove() 方法,可以在 指定序列化时移 ...

  8. JSON和XML格式与对象的序列化及反序列化的辅助类

    下面的代码主要是把对象序列化为JSON格式或XML格式等 using System; using System.Collections.Generic; using System.Globalizat ...

  9. Json.net 忽略实体某些属性的序列化

    遇到了一个小问题有一个用户类,结构和数据库一模一样,里面包含用户密码,要向前台返回用户信息的json数据,但是不能输出密码这个字段.之前的做法是 重新又建了一个不包含这个字段的新类,然后深度复制,总感 ...

随机推荐

  1. hdu 1024(滚动数组+动态规划)

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  2. hdu 1081(最大子矩阵)

    To The Max Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  3. 操作cephfs的基本命令

    [前提是已有一个基本可用的ceph集群] 一,在指定节点上部署mds: ceph-deploy mds create ceph-node1 二,新建两个存储池,用于保存cephfs的数据和元数据. c ...

  4. R语言平均值和加权平均值

    > a=c(,,) > mean(a) #平均值 [] > wt=c(,,) > weighted.mean(a,wt) #加权平均值 []

  5. selinux关闭

    查看SELinux状态: 1./usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态 SELinux status:         ...

  6. .net反射详解 原文://http://blog.csdn.net/wenyan07/article/details/27882363

    概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 运行时类型标识 运行时类型标识(RTTI),可以在程 ...

  7. 转:Spring学习笔记---Spring Security登录页

    转:http://axuebin.com/blog/2016/06/21/spring-security/?utm_source=tuicool&utm_medium=referral. 提示 ...

  8. Bzoj2721 [Violet]樱花(筛法)

    题面 题解 首先化一下式子 $$ \frac 1x+\frac 1y=\frac 1{n!} \Rightarrow \frac {x+y}{xy}=\frac 1{n!} \Rightarrow ( ...

  9. 安装xampp之后如何建立远程登录用户并修改登录方式和密码

    其实xampp作为开发环是非常好用的,但是很少人将其用作生产环境,主要还是它的安全性较低,很多默认设置都存在安全漏洞,但是实际上使用xampp在Linux下面进行配置确实是很节省时间的一件事(如果你的 ...

  10. 背包问题(dp基础)

    题目描述: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数).求背包能够容纳的最大价值. Input 第1 ...