博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Json.Net学习(1) 实现简单的序列化和反序列化
阅读量:5310 次
发布时间:2019-06-14

本文共 2061 字,大约阅读时间需要 6 分钟。

Attributes 可以用来控制Json.Net如何序列化和反序列化.Net对象。

>JsonObjectAttribute--标记在类上,用于控制该类如何被序列化为一个Json对象(JSON Object)

>JsonArrayAttribute--标记在集合上,用于控制该集合如何被序列化为一个Json集合(JSON Array)

>JsonPropertyAttribute--标记在字段和属性上,用于控制它如何被序列化为一个Json对象中的属性

>JsonConverterAttribute--标记在类或者字段和属性上,用于序列化时指定Json转换器(JsonConverter)

 这 里的MemberSerialization标记指定成员序列化为opt-in(每一个成员都必须标记JsonProperty或者DataMember attribute才被序列化)或者opt-out(默认情况下,除了被标记为JsonIgnoreAttribute的所有成员都将被序列化,这是 Json.Net 的默认行为)

  Json.Net把实现了IEnumerable接口的.Net类序列化为一个Json集合,用IEnumerable 的值来填充该集合。标记JsonPropertyAttribute来重写此行为,并强制序列化器序列化该类的字段和属性。

->JsonPropertyAttribute

  JsonPropertyAttribute有很多用途

    1.默认情况下,Json 属性与.Net属性有相同的名字,这个attribute允许自定义属性名

    2.当member serialization 被设置成opt-in时,指定属性应该被序列化

    3.在序列化和反序列化时包含非public属性

->JsonIgnoreAttribute

  从序列化中排除指定的字段或者属性

->JsonConverterAttribute

  JsonConverterAttribute指定Json序列化器(JsonSerializer)用来转换一个对象

  这个特性可以用来标记类或者成员,当它用来标记类的时候,由attribute指定的JsonConverter将为类提供默认的序列化方法.当它用来标记字段或者属性的时候,指定的JsonConverter将一直用于序列化该值。

  使用JsonConverter的优先级顺序为:先成员,后类,最后为传给JsonSerializer的任何转换器.

[JsonObject(MemberSerialization.OptIn)]    public class Person    {        [JsonProperty("CustomeName")]         public string Name { get; set; }        [JsonProperty]        public string Sex { get; set; }        [JsonProperty]        //[JsonConverter(typeof(IsoDateTimeConverter))]        //[JsonConverter(typeof(JavaScriptDateTimeConverter))]        public DateTime Birthday { get; set; }    }
string strJson = JsonConvert.SerializeObject(c, Formatting.Indented);

上面的[JsonProperty("CustomeName")]把Name属性重新命名为:CustomeName,Person类的JsonObject标签的值为MemberSerialization.OptIn,它要求必须显示声明需要序列化的元素.

如果我们不使用属性标签的话也就是这样:

public class Person    {        public string Name { get; set; }        public string Sex { get; set; }        public DateTime Birthday { get; set; }    }

这相当于设置了[JsonObject(MemberSerialization.OptOut)].此时就会执行Json.Net的默认行为,除了被标记为JsonIgnoreAttribute的所有成员都将被序列化.

序列化的结果如下:

{  "Name": "TestName",  "Sex": "Male",  "Birthday": "2013-07-22T21:41:31.4630318+08:00"}

转载于:https://www.cnblogs.com/lenther2002/p/4725396.html

你可能感兴趣的文章
通过微信小程序看前端
查看>>
锐浪 报表, 交叉报表中 对交叉字段,做条件改变背景颜色 .
查看>>
程序员的浪漫故事
查看>>
Binary Tree Zigzag Level Order Traversal,z字形遍历二叉树,得到每层访问的节点值。...
查看>>
1118.数值转换
查看>>
1068.球的半径和体积
查看>>
不同版本的浏览器代理编码
查看>>
【拓展】循环输入内容,直到输入内容为数字结束循环
查看>>
Jmeter下载安装配置及使用(windows)
查看>>
Javascript导航菜单13则
查看>>
iPad编程
查看>>
windows批量删除当前目录以及子目录的所有空文件夹
查看>>
基于Idea从零搭建一个最简单的vue项目
查看>>
前端对页面展示修改出现的问题------行内块元素(标签)、行内元素(标签)、块元素(标签)的区别...
查看>>
贝贝网电面
查看>>
《mysql必知必会》 笔记
查看>>
1.20(字符串)
查看>>
Day 25 面向对象高阶
查看>>
常规SQL SERVER数据库置疑后恢复步骤
查看>>
[hadoop](1) MapReduce:ChainMapper
查看>>