separate data container and serializer