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

如何在json-serializable中序列化Dart私有字段?

如何在json-serializable中序列化私有字段?

可以通过给私有字段添加@JsonKey注解,并确保序列化生成代码与类处于同一库中来实现,无需将私有字段改为公共字段或添加公共getter。

修改后的可运行代码

import 'package:json_annotation/json_annotation.dart';

part 'a.g.dart';

@JsonSerializable()
class A {
  @JsonKey(name: 'x') // 可选:指定序列化后的键名,若不指定则默认使用"_x"
  final int _x;
  
  A(int x) : _x = x;

  factory A.fromJson(Map<String, dynamic> json) => _$AFromJson(json);
  Map<String, dynamic> toJson() => _$AToJson(this); // 必须添加toJson方法以支持序列化
}

关键说明

  1. 库级可见性:Dart中以下划线开头的私有字段,可见范围是整个库(而非仅类内部)。json_serializable生成的.g.dart文件与原类文件属于同一库,因此生成的_$AFromJson和_$AToJson方法可以直接访问_x字段。
  2. @JsonKey注解:用于指定字段在JSON中的键名,避免JSON中出现带下划线的键(当然也可以不指定,直接使用_x作为JSON键)。
  3. 生成代码:执行以下命令生成序列化代码:
    dart run build_runner build
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:39:32