You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中用System.Text.Json反序列化至含私有构造函数的不可变类

使用System.Text.Json反序列化至带私有构造函数的不可变类

要实现「只允许通过System.Text.Json反序列化创建不可变类实例、同时隐藏构造函数」的需求,只需给私有构造函数标记**[JsonConstructor]**特性即可。System.Text.Json会识别并优先使用带有该特性的构造函数,无论其访问修饰符是私有还是其他。

实现示例

public class Sheet
{
    public string Id { get; }
    public IEnumerable<IEnumerable<SheetCell>> Data { get; }

    [JsonConstructor]
    private Sheet(string id, IEnumerable<IEnumerable<SheetCell>> data)
    {
        Id = id;
        Data = data;
    }
}

// 配套的SheetCell不可变类示例
public class SheetCell
{
    public string Value { get; }

    [JsonConstructor]
    private SheetCell(string value)
    {
        Value = value;
    }
}

关键注意事项

  • 构造函数的参数名称必须与JSON中的属性名称大小写匹配(默认配置下),若需忽略大小写,可在JsonSerializerOptions中设置PropertyNameCaseInsensitive = true。
  • 类的属性需使用只读自动属性({ get; }),确保实例创建后状态不可修改,符合不可变类的设计要求。
  • 可在私有构造函数中添加参数校验、默认值赋值等逻辑,保证实例的有效性。

内容的提问来源于stack exchange,提问作者Justas Mileika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:13:14