一个JSON序列化类,用于将DateTime和自定义类转换为JSON格式和从JSON格式。

特点

Jsonize解决了序列化和反序列化到未定义结构的问题。

默认情况下,Jsonize支持在数据结构中的任何位置进行DateTime序列化。

  List<dynamic> myList = [1, "Hello!", DateTime.now()];
  var jsonRep = Jsonize.toJson(myList);
  var myDeserializedList = Jsonize.fromJson(jsonRep);

Jsonize也支持您自己的类。您可以注册一个类型,或者让您的类实现[Jsonizable]接口。

class MyClass implements Jsonizable<MyClass> {
  String? str;
  MyClass([this.str]);
  factory MyClass.empty() => MyClass();

  // Jsonizable implementation
  @override
  String get jsonClassCode => "mc";
  @override
  dynamic toJson() => str;
  @override
  MyClass? fromJson(value) => MyClass(value);
}

void main() {
  Jsonize.registerClass(MyClass.empty());
  Map<String, dynamic> myMap = {
    "my_num": 1,
    "my_str": "Hello!",
    "my_dt": DateTime.now(),
    "my_class": MyClass("here I am!")
  };
  var jsonRep = Jsonize.toJson(myMap);
  var myDeserializedMap = Jsonize.fromJson(jsonRep);

Jsonize.toJson(...)支持缩进,以便获得更大但更易读的JSON格式。

有关更复杂的示例,如子类,请参阅示例部分。

附加信息

由于当前的Dart实现不支持反射,Jsonize需要我称之为两个额外的步骤。

  1. 注册所有您想要序列化的类型/类。
  2. 如果实现了Jsonizable接口,您需要注册一个类实例(例如,factory MyClass.empty() => …)。

我希望未来的Dart版本能够支持更好的反射和类型处理。

GitHub

查看 Github