最小可复制代码:
@JsonSerializable()
class A {
final int _x;
A(int x) : _x = x;
factory A.fromJson(Map<String, dynamic> json) => _$AFromJson(json);
}
注意:
我不想让我的私有字段_x
public或定义一个公共x
getter
此PR满足您的需求:https://github.com/google/json_serializable.dart/pull/1256/files diff-0acaf4c472e452d1e5d215a15fcd2266ccd02ab6abdfac0080c2fca845eb9096
您将能够在您想要包含的私有字段上显式设置includeFromJson
和includeToJson
。
的例子:
class X {
@JsonKey(includeFromJson: true, includeToJson: true)
int _includeMeToTheJsonParsing;
}
11月30日合并。最新的软件包版本是v6.5.4,于10月25日发布。所以如果你想要正式发布,你需要等待一段时间。否则,如果你需要,你可以直接指向最近的提交。
如果您不想将私有字段设置为公共或定义公共getter,您仍然可以使用json_serializable或built_value等序列化库来序列化和反序列化类,但是您需要定义一个自定义toJson方法来手动序列化私有字段。下面是一个使用json_serializable和自定义toJson方法的示例:
import 'package:json_annotation/json_annotation.dart';
part 'my_class.g.dart';
@JsonSerializable()
class MyClass {
final int _x;
MyClass(this._x);
Map<String, dynamic> toJson() => {
'x': _x,
};
factory MyClass.fromJson(Map<String, dynamic> json) => MyClass(json['x'] as int);
}
你可以使用fromJson和toJson方法来序列化和反序列化你的类:
import 'dart:convert';
void main() {
// Serialize to JSON
MyClass obj = MyClass(42);
String json = jsonEncode(obj);
// Deserialize from JSON
MyClass obj2 = MyClass.fromJson(jsonDecode(json));
}