架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 18485|回复: 2

[资料] Newtonsoft.Json忽略DataContract特性

[复制链接]
发表于 2018-5-30 16:50:17 | 显示全部楼层 |阅读模式
Newtonsoft.Json 大家应该都知道,常用的json序列化和反序列化工具

DataContractAttribute 指定该类型要定义或实现一个数据协定,并可由序列化程序(如 DataContractSerializer)进行序列化。 若要使其类型可序列化,类型作者必须为其类型定义数据协定。

遇到一个难题,父类有[DataContract]特性,子类继承父类,子类所有的属性都需要加上[DataMember]特性,才能序列化和反序列化,由于父类是别人封装的dll,所以,无法删除父类的[DataContract]特性!

测试如下,Test1类有[DataContract]特性,如果属性不加[DataMember]特性,会导致序列化和反序列化失败,如下图:

QQ截图20180530163727.jpg


我们注释掉Test1类的[DataContract]特性,发现能正常序列化和反序列化,如下:

QQ截图20180530163808.jpg

Newtonsoft.Json有没有什么高级的用法,可以忽略此特性呢?答案是有的!

只需使用Json.Net的OptOut属性即可。它将优先于DataContract。

//
        //摘要:
        //所有公共成员都默认序列化。成员可以使用Newtonsoft.Json.JsonIgnoreAttribute排除
        //或System.NonSerializedAttribute。这是默认的成员序列化模式。
        OptOut = 0,
        //
        //摘要:
        //只有标有Newtonsoft.Json.JsonPropertyAttribute或System.Runtime.Serialization.DataMemberAttribute的成员
        //被序列化。此成员序列化模式也可以通过标记来设置
        / /类与System.Runtime.Serialization.DataContractAttribute。
        OptIn = 1,
        //
        //摘要:
        //所有公共和私人字段都被序列化。成员可以使用Newtonsoft.Json.JsonIgnoreAttribute排除
        //或System.NonSerializedAttribute。这个成员序列化模式也可以
        //通过用System.SerializableAttribute标记类并设置IgnoreSerializableAttribute来设置
        //将Newtonsoft.Json.Serialization.DefaultContractResolver设置为false。
        Fields = 2
QQ截图20180530163916.jpg

测试代码:







上一篇:监视AppDomain
下一篇:.NET最快的OOM对象映射组件Tiny Mapper之项目实践
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2018-6-1 13:20:10 | 显示全部楼层
判断json字符串是对象还是数组
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    case "Object":
                        break;
                    case "Array":
                        break;
                    default:
                        break;
                }
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-8-21 11:52:32 | 显示全部楼层
支持一下 楼主是高手 求大腿
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-5-21 04:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表