require 5.4 and add JsonSerializable