当前位置: 首页 > wzjs >正文

博山信息港株洲seo优化

博山信息港,株洲seo优化,大气的企业网站模板,网页设计及制作方法总目录 一、JsonIgnoreCondition 枚举值详解 JsonIgnoreCondition 是一个枚举类型,用于控制序列化或反序列化时如何忽略属性或字段。其枚举值及其含义如下: 枚举值作用Always始终忽略该成员(无论值是什么)。Never从不忽略该成员…

总目录


一、JsonIgnoreCondition 枚举值详解

JsonIgnoreCondition 是一个枚举类型,用于控制序列化或反序列化时如何忽略属性或字段。其枚举值及其含义如下:

枚举值作用
Always始终忽略该成员(无论值是什么)。
Never从不忽略该成员(即使全局设置了 DefaultIgnoreCondition)。
WhenWritingDefault当属性值为 默认值 时忽略(如 int 的默认值 0stringnull)。
WhenWritingNull当属性值为 null 时忽略(仅对可为 null 的类型生效)。

二、核心使用场景

1. 通过 [JsonIgnore] 特性控制单个成员

使用 [JsonIgnore(Condition = ...)] 特性可对单个属性或字段的忽略行为进行细粒度控制。

1)始终忽略属性(Always

public class User
{public string Name { get; set; }[JsonIgnore(Condition = JsonIgnoreCondition.Always)]public string Password { get; set; } // 始终忽略
}class Program
{static void Main(){var user = new User { Name = "Alice", Password = "123" };string json = JsonSerializer.Serialize(user);Console.WriteLine(json);// 输出:{"Name":"Alice"}}
}

2)仅在值为 null 时忽略(WhenWritingNull

public class Product
{public string Name { get; set; }[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]public string Description { get; set; } // 值为 null 时忽略
}class Program
{static void Main(){// 场景 1:Description 为 nullvar product1 = new Product { Name = "Book", Description = null };string json1 = JsonSerializer.Serialize(product1);Console.WriteLine(json1);// 输出:{"Name":"Book"}// 场景 2:Description 有值var product2 = new Product { Name = "Pen", Description = "Writing tool" };string json2 = JsonSerializer.Serialize(product2);Console.WriteLine(json2);// 输出:{"Name":"Pen","Description":"Writing tool"}}
}

3)仅在默认值时忽略(WhenWritingDefault

public class Settings
{public int MaxConnections { get; set; } // 默认值为 0[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]public int Timeout { get; set; } // 默认值为 0
}// 场景 1:Timeout 为默认值 0
var settings1 = new Settings { MaxConnections = 10 };
string json1 = JsonSerializer.Serialize(settings1);
// 输出:{"MaxConnections":10}(Timeout 被忽略)// 场景 2:Timeout 被显式赋值
var settings2 = new Settings { MaxConnections = 10, Timeout = 30 };
string json2 = JsonSerializer.Serialize(settings2);
// 输出:{"MaxConnections":10,"Timeout":30}

2. 全局设置 DefaultIgnoreCondition

通过 JsonSerializerOptions.DefaultIgnoreCondition 可为所有未显式标记的成员设置默认忽略规则。

通过设置 JsonSerializerOptions 类中的 DefaultIgnoreCondition 属性 来设置全局忽略规则

1)全局忽略默认值

public class Data
{public string Name { get; set; } // 默认值为 nullpublic int Count { get; set; }   // 默认值为 0
}var options = new JsonSerializerOptions
{DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault // 全局设置
};// 场景:对象未初始化
var data = new Data();
string json = JsonSerializer.Serialize(data, options);
// 输出:{}(Name 和 Count 均被忽略,因为它们是默认值)// 场景:显式赋值
var data2 = new Data { Name = "Test", Count = 5 };
string json2 = JsonSerializer.Serialize(data2, options);
// 输出:{"Name":"Test","Count":5}

2)全局忽略 null

public class User
{public int Id { get; set; }public string Name { get; set; }public string Password { get; set; }
}
class Program
{static void Main(){var options = new JsonSerializerOptions{DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull // 全局设置};// 场景:对象未初始化var user = new User();string json = JsonSerializer.Serialize(user, options);Console.WriteLine(json);// 输出:{"Id":0}// 场景:显式赋值var user2 = new User { Id = 1, Name = "Test" };string json2 = JsonSerializer.Serialize(user2, options);Console.WriteLine(json2);// 输出:{"Id":1,"Name":"Test"}}
}

3)全局忽略与 [JsonIgnore] 特性 混合设置

public class User
{public int Id { get; set; }[JsonIgnore(Condition = JsonIgnoreCondition.Never)]// 始终忽略public string Name { get; set; }[JsonIgnore(Condition = JsonIgnoreCondition.Never)]// 始终忽略public string Password { get; set; }
}class Program
{static void Main(){var options = new JsonSerializerOptions{DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault // 全局设置};// 场景:对象未初始化var user = new User();string json = JsonSerializer.Serialize(user, options);Console.WriteLine(json);// 输出:{"Name":null,"Password":null}// 场景:显式赋值var user2 = new User { Id=1, Name = "Test"};string json2 = JsonSerializer.Serialize(user2, options);Console.WriteLine(json2);// 输出:{"Id":1,"Name":"Test","Password":null}}
}

4)优先级规则

  • 局部优先级[JsonIgnore(Condition = ...)] 的设置会覆盖全局 DefaultIgnoreCondition
  • 组合条件:多个条件(如 WhenWritingNullWhenWritingDefault)可同时生效。

三、扩展

1. 忽略只读属性

通过 JsonSerializerOptions.IgnoreReadOnlyProperties 可全局忽略只读属性:

public class Book
{public string Title { get; set; }public int Pages { get; private set; } = 300; // 只读属性
}
class Program
{static void Main(){var options = new JsonSerializerOptions{IgnoreReadOnlyProperties = true // 忽略只读属性};var book = new Book { Title = "C# in Depth" };string json = JsonSerializer.Serialize(book, options);Console.WriteLine(json);// 输出:{"Title":"C# in Depth"}(Pages 被忽略)}
}

2. JsonInclude 的配合

若需序列化非公共属性或字段,需结合 [JsonInclude] 特性:

public class User
{public int Id { get; set; }public string Name { get; set; }public string Password { get; set; }[JsonInclude]public int _age;
}
class Program
{static void Main(){var user = new User { Id = 1, Name = "Jack", Password = "121", _age = 12 };      string json = JsonSerializer.Serialize(user);Console.WriteLine(json);// 输出:{"Id":1,"Name":"Jack","Password":"121","_age":12}}
}

3. 同时忽略默认值和 null

1)指定属性

public class User
{public int Id { get; set; }public string Name { get; set; }[JsonIgnore(Condition =JsonIgnoreCondition.WhenWritingDefault| JsonIgnoreCondition.WhenWritingNull)]public string Password { get; set; }
}

2)全局设置

var options = new JsonSerializerOptions
{DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull | JsonIgnoreCondition.WhenWritingDefault
};

四、实际应用

  • 场景 1:在 API 响应中,某些字段可能需要根据环境动态显示/隐藏(例如调试模式下包含 Age 属性)。
  • 场景 2:处理第三方 JSON 数据时,临时禁用 [JsonIgnore] 标记以兼容旧版接口。

通过灵活配置 DefaultIgnoreCondition,可以精准控制序列化的输出内容,提升代码的灵活性和可维护性。


结语

回到目录页:C#/.NET 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。

http://www.dtcms.com/wzjs/147061.html

相关文章:

  • 怎么给网站加在线客服seo优化的技巧
  • 做的视频发到哪个网站百度地图打车客服人工电话
  • 如何给网站做二维码代写软文
  • 众筹网站建设费用宝塔没有域名直接做网站怎么弄
  • 哪个网站做logo设计公司怎么在百度上推广
  • 教你如何做好网站青岛网
  • 网站开发项目管理文档模板明星百度指数在线查询
  • 网站建设的公司开发方案安徽网络建站
  • 上海奉贤网站建设廊坊seo推广
  • 淘宝网站图片维护怎么做连接交换
  • 灰蓝 网站模板软文怎么写吸引人
  • 做一个网站需要多少时间长沙seo关键词排名优化
  • 网站业务员怎么给客户做方案宁波网络营销推广公司
  • 做的比较简约的网站品牌网络seo方案外包
  • 城阳建网站windows优化大师免费版
  • 传媒网站给行业做宣传朋友圈营销广告
  • 中国兰州网pc主站亚马逊跨境电商个人开店
  • 福州做网站设计中国制造网网站类型
  • 建设厅官方网站新资质标准可以免费发外链的论坛
  • 怎么做网页别人可以看到图片凌云seo博客
  • 西固网站建设平台如何在各大网站发布信息
  • 怎么做一个动态网站吗如何做友情链接
  • 网站建设制作设计惠州私域流量营销
  • 无锡网站制作哪里有厦门谷歌seo公司
  • 小型企业做网站的价格产品推广方案ppt
  • 免费网站建设绑定域名seo排名优化首页
  • 石材网站模板上海抖音seo公司
  • 快速做网站用什么软件优化百度seo技术搜索引擎
  • ps网站建设教程视频百度人工服务热线
  • 天眼免费查询个人简述搜索引擎优化的方法