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



最小可复制代码:

@JsonSerializable()
class A {
final int _x;
A(int x) : _x = x;
factory A.fromJson(Map<String, dynamic> json) => _$AFromJson(json);
}

注意:

我不想让我的私有字段_xpublic或定义一个公共xgetter

此PR满足您的需求:https://github.com/google/json_serializable.dart/pull/1256/files diff-0acaf4c472e452d1e5d215a15fcd2266ccd02ab6abdfac0080c2fca845eb9096

您将能够在您想要包含的私有字段上显式设置includeFromJsonincludeToJson

的例子:

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));
}

相关内容

  • 没有找到相关文章

最新更新