使用 System.Text.Json 反序列化带有私有 setter 的属性

Gab*_*ton 3 c# serialization system.text.json

有没有办法将System.Text.Json.JsonSerializer.Deserialize与包含私有 setter 属性的对象一起使用,并填充这些属性?(就像Newtonsoft.Json那样)

Ale*_*aus 37

根据官方文档(C# 9),您有 2 个选项:

  1. 使用init而不是set在财产上。例如public string Summary { get; init; }

  2. JsonInclude使用私有设置器在属性上添加属性。例如

    [JsonInclude] 
    public string Summary { get; private set; }
    
    Run Code Online (Sandbox Code Playgroud)

一个额外的选项(从 .NET 5 开始)将private通过添加相同的JsonInclude属性 ( docs ) 或设置JsonSerializerOptions.IncludeFields选项 ( example ) 来处理字段。这在意识形态上是否正确是另一个问题......

无论哪种方式,JsonSerializer.DeserializeAsync都会为您完成。


Dan*_*ite 9

在 .NET Core 3.x 中,这是不可能的。在 .NET 5 时间线中,添加了.

  • 看起来 newtonsoft 仍然在桌面上,必须经历所有这些诡计只是为了替换“它只是有效”的行为在这一点上已经过时了:/ (3认同)