首页 > 其他分享 >Newtonsoft 特性[JsonIgnore ] 对于继承属性的神奇效果

Newtonsoft 特性[JsonIgnore ] 对于继承属性的神奇效果

时间:2024-07-23 18:17:39浏览次数:12  
标签:Newtonsoft JsonIgnore get int class set CommonRelationba public 神奇

阅读前请有点基础

            [JsonIgnore]
            public DateTime CreateTimccc { get; set; }

一般用Newtonsoft 序列化类时候,如果不要序列化这个属性,在上面加这个特性就好了(ps.这个特性和Newtonsoft和Text.Json的名称重复,注意不要搞错)

定义子类和父类,用隐藏基类属性的方式

        class CommonRelationTest : CommonRelationba
        {
            public new  int RelationBusinessState { get; set; } = 2;
        }
        class CommonRelationba
        {
            public  int RelationBusinessState { get; set; } = 1;
        }

测试代码

       Console.WriteLine(JsonConvert.SerializeObject(new CommonRelationTest()));
       Console.WriteLine(JsonConvert.SerializeObject(new CommonRelationba()));

结果如下

 

接下来,代码修改一下,加入[JsonIgnore]特性

        class CommonRelationTest : CommonRelationba
        {
            public new  int RelationBusinessState { get; set; } = 2;
        }
        class CommonRelationba
        {
            [JsonIgnore]
            public int RelationBusinessState { get; set; } = 1;
        }

        class CommonRelationTest : CommonRelationba
        {
            [JsonIgnore]
            public new  int RelationBusinessState { get; set; } = 2;
        }
        class CommonRelationba
        {
            public  int RelationBusinessState { get; set; } = 1;
        }

代码,很神奇吧,好像和预期的不一样,预期上面应该是输出 {} ,再改一下

        class CommonRelationTest : CommonRelationba
        {
            [JsonIgnore]
            public new  int RelationBusinessState { get; set; } = 2;
        }
        class CommonRelationba
        {
            [JsonIgnore]
            public int RelationBusinessState { get; set; } = 1;
        }

这个原因是 JsonIgnore attribute on shadowed properties · Issue #463 · JamesNK/Newtonsoft.Json (github.com) 里面有解释

主要就是要区分new属性和原本,不然会降低灵活性,如果正好有人需要序列化基类的属性呢?(需求就是这样,我就不要评判)

如果要实现想要的需求,可以通过虚方法去实现

如果你虚方法用这种写法,那么结果是(我这里只展示1个,其余写法和上面输出的结果一样)

        class CommonRelationTest : CommonRelationba
        {
            [JsonIgnore]
            public new int RelationBusinessState { get; set; } = 2;
        }
        class CommonRelationba
        {
            public virtual int RelationBusinessState { get; set; } = 1;
        }

接下来写下真的虚方法

        class CommonRelationTest : CommonRelationba
        {
            public override  int RelationBusinessState { get; set; } = 2;
        }
        class CommonRelationba
        {
            [JsonIgnore]
            public virtual int RelationBusinessState { get; set; } = 1;
        }

        class CommonRelationTest : CommonRelationba
        {
            [JsonIgnore]
            public override  int RelationBusinessState { get; set; } = 2;
        }
        class CommonRelationba
        {
            public virtual int RelationBusinessState { get; set; } = 1;
        }

        class CommonRelationTest : CommonRelationba
        {
            [JsonIgnore]
            public override  int RelationBusinessState { get; set; } = 2;
        }
        class CommonRelationba
        {
            [JsonIgnore]
            public virtual int RelationBusinessState { get; set; } = 1;
        }

 注意对比下不同, 果然,代码很神奇哦

 

标签:Newtonsoft,JsonIgnore,get,int,class,set,CommonRelationba,public,神奇
From: https://www.cnblogs.com/czb071/p/18319217

相关文章

  • .NET|--杂类|--json文件未释放, 就开始反序列化, 报错Newtonsoft.Json Unexpected cha
    前言一个看起来很莫名其妙的错误,json文件我打开看了下,格式也都正确,但是在vs中调试的时候,监视--查看--JSON可视化工具查看json字符串的话,会提示"字符串未设置为JSON格式","监视--查看--文本可视化工具",发现json格式确实看不出来任何问题.报错#报......
  • C# Newtonsoft.Json 高级用法
    一、基本用法Json.Net是支持序列化和反序列化DataTable,DataSet,EntityFramework和Entity的。下面分别举例说明序列化和反序列化。//序列化DataTableDataTabledt=newDataTable();dt.Columns.Add("Age",Type.GetType("System.Int32"));dt.Columns.Add("Name",Type.Get......
  • 时光魔法师——专业照片处理软件的神奇魅力
    引言:时光印记的守护者在这个数字化的时代,照片不仅仅是记忆的载体,更是情感的传递者。然而,随着时间的流逝,照片可能会褪色、损坏,失去原有的光彩。一款集多种功能于一体的专业照片处理软件,成为了时光的守护者,让每一张照片都能重现其最初的美丽。功能亮点:照片修复与特效赋予......
  • 算法金 | Transformer,一个神奇的算法模型!!
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」抱个拳,送个礼在现代自然语言处理(NLP)领域,Transformer模型的出现带来了革命性的变化。它极大地提升了语言模型的性能和效率,而自注意力机制是其中的核心组件。今个儿我们将......
  • 用Xpath制作简单爬虫工具,获取神奇宝贝百科的精灵信息
    最近开始学习Python的爬虫应用,个人比较喜欢用Xpath的方式来爬取数据,今天就结合一下Xpath方式,以“神奇宝贝百科”为素材,制作一个爬取每只宝可梦数据的工程项目准备工作神奇宝贝百科地址:https://wiki.52poke.com/wiki/主页工程项目的目标是,获取每只精灵的名字、编号、属性、特性......
  • 用Xpath制作简单的爬取网页工具,获取神奇宝贝百科每只精灵的信息
    最近开始学习Python的爬虫应用,个人比较喜欢用Xpath的方式来爬取数据,今天就结合一下Xpath方式,以“神奇宝贝百科”为素材,制作一个爬取每只宝可梦数据的工程项目准备工作神奇宝贝百科地址:https://wiki.52poke.com/wiki/主页工程项目的目标是,获取每只精灵的名字、编号、属性、特性......
  • 神奇的JavaScript弱等价类型转换
    JavaScript语言特性-类型转换JavaScript这门语言的类型系统从来没有它表面看起来的那样和善,虽然比起Java、C#等一众强类型语言,它的弱类型使用起来似乎是如此便利,但正因为它极高的自由度,所以才会衍生出令人摸不着头脑的荒诞行为。举个例子,虽然我们都知道一个包含内容的字符串会......
  • C++ OpenCV 图像分类魔法:探索神奇的模型与代码
    ⭐️我叫忆_恒心,一名喜欢书写博客的研究生......
  • C# 使用Newtonsoft.Json的JsonProperty设置返回的Json数据列名/C# 通过实体类序列化生
    原文链接:https://blog.csdn.net/weixin_44917045/article/details/103236167         https://blog.csdn.net/bazinga_y/article/details/134416680在写分页的时候,返回Json数据给前台的时候,数据不能出来,原因就是Json数据的列名是大写的,而页面需要的是小写的。......
  • 解锁用Mermaid绘制图表的神奇力量
    在这个快节奏、信息爆炸的时代,我们迫切需要一种简单、高效且美观的方式来表达复杂的思想和流程。幸运的是,Mermaid就是这样一种工具。无论你是开发者、项目经理还是设计师,Mermaid都能帮助你轻松绘制各种类型的图表,让你的文档和报告更加生动有趣。现在,让我们一起探索如何使......