我们可以忽略类属性中的 c# 列表吗? [复制]

Posted

技术标签:

【中文标题】我们可以忽略类属性中的 c# 列表吗? [复制]【英文标题】:Can we ignore a c# list from class property? [duplicate] 【发布时间】:2020-08-13 09:32:09 【问题描述】:

如果 List 为 null,c# 中有什么机制可以忽略它吗?

public class VehicleResponse 
  
        public Pagination pagination  get; set; 
        public Vehicles data  get; set;         
        public Include include  get; set; 
    

此处包含类属性可能为空。如果它为空,那么我想忽略该属性。

 public class Include
    
        
        public List<Devices> devices  get; set; 
        public List<Institutions> institutions  get; set; 
        public List<Cars> cars get; set; 
    

这是包含的类。如果任何列表(如设备、机构或汽车)为空,则应将其忽略。

我不想在我的 json 响应中显示空值。如果它们为空,则忽略它们。

【问题讨论】:

“我不想在我的 json 响应中显示空值”——这是关键部分。 (没有一般忽略属性的概念。)现在,您使用的是哪个 JSON 序列化程序?在 Json.NET (Newtonsoft.Json) 中肯定有一个设置。我不确定 System.Text.Json。 “我不想在我的 json 响应中显示空值。” - 你可能想让这一点更明显一点。在最后一行之前,我真的很困惑您所说的“忽略”是什么意思。您可能还想使用您正在使用的相应 JSON 序列化程序来标记您的问题。由于您已标记 ASP.NET Core,因此这很可能是 JSON.NET 或 System.Text.Json。 "pagination": "offset": 1, "limit": 4, "total": 1 , "data": "vehicles": [ "vehicleId": 6, "deviceId": 1, ] , "include": "devices": [ "deviceId": 1, "serialNumber": "1234567890" ], "institutions": null, "models": null , "status": true, "message": "车辆检索成功。", "responseCode": 200 @John 以上是我基于我的类属性的 json 响应。这里“机构”和“模型”为空,所以我不想在 json 响应中显示。 为什么我删除了 ASP.NET 标签后又重新添加了它?该标签的描述清楚地表明它不应该用于 ASP.NET Core 问题。另外,您还没有告诉我们您使用的是哪个 JSON 序列化程序。 【参考方案1】:

您必须创建一个空的构造函数来初始化这些列表,JSON 结果将是空列表。

public class Include
    
        public Include()
           devices = new List<Devices>();
           institutions = new List<Institutions>();
           cars= new List<Cars>();
        
        public List<Devices> devices  get; set; 
        public List<Institutions> institutions  get; set; 
        public List<Cars> cars get; set; 
    

编辑

我刚刚找到了这个.NET Core: Remove null fields from API JSON response 我希望它可以提供帮助。否则我建议您编写自己的 OutputFormatter

【讨论】:

序列化空列表 ("foo : []") 与忽略默认值不同,其中键“foo”将完全不存在。 在这种情况下,您可以使用docs.microsoft.com/en-us/aspnet/core/web-api/advanced/…实现自己的OutputFormatter

以上是关于我们可以忽略类属性中的 c# 列表吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C#列表比较忽略类项

用私有属性替换类中的每个字段是一种不好的做法吗? [复制]

在.NET中,你可以使用反射来获取一个类的所有非继承方法吗?

C#中的属性名和方法名可以相同吗? [复制]

C# 类可以从其接口继承属性吗?

将 Optional 用作类中的属性是一种好习惯吗? [复制]