protected bool Equals(Employee other)
 {
     return string.Equals(Name, other.Name) && Equals(Supervisor, other.Supervisor);
 }
        public void can_round_trip()
        {
            var employee1 = new Employee()
            {
                Name = "Austin"
            };

            var stream = new MemoryStream();
            _serializer.Serialize(employee1, stream);

            stream.Position = 0;

            var employee2 = _serializer.Deserialize(stream).ShouldBeOfType<Employee>();
            employee1.ShouldBe(employee2);
        }
        public void can_round_trip_circular_dependencies()
        {
            var employee = new Employee
            {
                Name = "Jim"
            };
            var boss = new Employee
            {
                Name = "Boss",
                Subordinates = { employee }
            };
            employee.Supervisor = boss;

            var stream = new MemoryStream();
            _serializer.Serialize(new List<Employee> { boss, employee }, stream);

            stream.Position = 0;

            var employees = _serializer.Deserialize(stream).ShouldBeOfType<List<Employee>>();
            var newBoss = employees.First();
            var newEmployee = employees.Last();

            newBoss.ShouldBe(boss);
            newEmployee.ShouldBe(employee);
            //Same object reference
            newEmployee.Supervisor.ShouldBeTheSameAs(newBoss);
        }