Json.net说法——(一)修饰标签,日期序列化

简介: 通过属性标签自定义JSON序列化   JsonObjectAttribute:类修饰标签,用于控制类如何被序列化为一个json对象 JsonArrayAttribute:集合修饰标签,用于控制集合如何被序列化为一个json对象 JsonPropertyAttribute:域和属性修饰标签,用...

通过属性标签自定义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(要序列化的成员必须带有JsonPropertyDataMember标签)还是opt-out(默认所有的都会序列化,但通过JsonIgnoreAttribute标签可以忽略序列化。opt-outjson.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"

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

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
6月前
feign发起url请求日期序列化问题
feign发起url请求日期序列化问题
174 0
|
2月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
44 1
|
2天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
4天前
|
JSON JavaScript 前端开发
|
2月前
|
JSON Go 数据格式
Golang语言结构体链式编程与JSON序列化
这篇文章是关于Go语言中结构体链式编程与JSON序列化的教程,详细介绍了JSON格式的基本概念、结构体的序列化与反序列化、结构体标签的使用以及如何实现链式编程。
37 4
|
2月前
|
JSON 数据格式
序列化 json和pickle
序列化 json和pickle
|
3月前
|
存储 JSON JavaScript
python序列化: json & pickle & shelve 模块
python序列化: json & pickle & shelve 模块
|
3月前
|
JSON Java 数据格式
【IO面试题 七】、 如果不用JSON工具,该如何实现对实体类的序列化?
除了JSON工具,实现实体类序列化可以采用Java原生序列化机制或第三方库如Protobuf、Thrift、Avro等。
|
4月前
|
JSON Dart 安全
Flutter Dart Macro 宏简化 JSON 序列化
今天我们将会体验 dart 语言新特性 macro 宏,来实现对 json 的序列化,用到的包是官方实验室写的 json 包。 本文将会一步步的带你实现这个功能,那我们开始吧。
Flutter Dart Macro 宏简化 JSON 序列化
|
3月前
|
XML 存储 JSON
(十二)探索高性能通信与RPC框架基石:Json、ProtoBuf、Hessian序列化详解
如今这个分布式风靡的时代,网络通信技术,是每位技术人员必须掌握的技能,因为无论是哪种分布式技术,都离不开心跳、选举、节点感知、数据同步……等机制,而究其根本,这些技术的本质都是网络间的数据交互。正因如此,想要构建一个高性能的分布式组件/系统,不得不思考一个问题:怎么才能让数据传输的速度更快?