我有一个有点复杂的数据类,其中有一些相互关联的属性.一个非常简单的布尔值表示是否使用了同样复杂的子类,它是属性之一.这个子类在json文件中使用了大量空间,我希望只设置那些需要的值.

通常,我只需要遍历代码,将复杂子类设置为null,并添加一个"JsonProperty(NullValueHandling=NullValueHandling.Ignore)"作为属性的属性.但是代码真的很复杂,我更喜欢使用一个属性,并说"如果布尔值为false,则忽略".

这个是可能的吗?也许用JsonConverter或类似的东西?

推荐答案

听起来您应该使用基于ShouldSerialize的条件属性序列化

所以,如果你有一个这样的课程;

public class Employee
{
    public string FirstName { get; set; }
    public string Surname { get; set; }
    public bool AddressPopulated { get; set; }
    public string Street1 { get; set; }
    public string Street2 { get; set; }
    public string Postcode { get; set; }
    public string City { get; set; }

  //Add should serialise here
}

如果将AddressPopulated设置为True,则只想序列化,然后对所有有条件的属性使用此选项,并将它们添加到上面的类中.像这样.

public bool ShouldSerializeStreet1() { return AddressPopulated; }
public bool ShouldSerializeStreet2() { return AddressPopulated; }
public bool ShouldSerializeCity() { return AddressPopulated; }
public bool ShouldSerializePostcode() { return AddressPopulated; }

另请参阅文档

https://www.newtonsoft.com/json/help/html/conditionalproperties.htm

Csharp相关问答推荐

如何将两个查询结果组合在C#ASP.NET MHC控制器中

如何将ref T*重新解释为ref nint?

EF Core Fluent API中定义的多对多关系

Microsoft. SQLServer. Types(106.1000.6)在try 从用户定义的类型检索值时引发异常

以自动方式注销Azure身份应用程序

处理. netstandard2.0项目中HttpClient.SslProtocol的PlatformNotSupportedException问题""

此反射有什么问题.是否发送值转换委托?

未找到任何HTTP触发器.成功部署Azure Functions Project后(c#)

显示文档的ECDsa签名PDF在Adobe Reader中签名后已被更改或损坏

LINQ to Entities中的加权平均值

同一组件的多个实例触发相同的事件处理程序

.NET 8在appsettings.json中核心使用词典URI、URI&>

.Net MAUI,在将FlyoutPage添加到容器之前,必须设置添加构造函数导致Flyout和Detail"

在';、';附近有错误的语法.必须声明标量变量";@Checkin";.';

使用ASP.NET MVC for Lemon Squeezy X-Signature创建散列

try 创建一个C#程序,该程序使用自动实现的属性、覆盖ToString()并使用子类

Maui:更改代码中的绑定字符串不会更新UI,除非重新生成字符串(MVVM)

ASP.NET核心8:app.UseStaticFiles()管道执行顺序

单位中快照的倾斜方向

如何在C#中用Serilog记录类路径、方法名和行编号