add serilization, and deserilization