Q:

Deserialising XML to nested object List returning count 0

I am having some issue with deserialising some XML to an object list, always getting count 0 and within that "raw data" when inspecting DateAndTimeSlot during debug.
Unfortunately I cannot change the names of these elements.
However when checking the XML I get back, there are DateAndTimeslot objects in the XML.
With other object lists I have all seems fine, without the inclusion of namespaces.
What have I missed?
C# Code:
    [XmlRoot("AppointmentAvailabilityStatusResponse")]
    public class CheckAppointmentAvailabilityContainer
    {
        [XmlElement("AppointmentAvailabilityStatusResult")]
        public AppointmentAvailabilityStatus appointmentAvailabilityStatus { get; set; }
    }
    [XmlRoot("AppointmentAvailabilityStatusResult", Namespace = "Appointments")]
    public class AppointmentAvailabilityStatus
    {
        [XmlArray("DateAndTimeSlot", Namespace = "Appointments")]
        [XmlArrayItem(typeof(DateAndTimeslot))]
        public DateAndTimeSlots DateAndTimeSlot { get; set; }
        [XmlElement("RequestedStatus")]
        public int RequestedStatus { get; set; }
    }
    [XmlRoot(ElementName = "DateAndTimeSlot")]
    [XmlType("a")]
    public class DateAndTimeSlots : List<DateAndTimeslot> { }

    [XmlRoot(ElementName = "DateAndTimeslot", Namespace = "Appointments.TO")]
    [XmlType("b")] // if included this renames the node to "b" for some reason
    public class DateAndTimeslot
    {
        [XmlElement("Date")]
        public string Date { get; set; }
        [XmlElement("TimeSlot")]
        public string TimeSlot { get; set; }
    }

Shortened XML returned that I wish to fully deserialise.
<AppointmentAvailabilityStatusResponse>
  <AppointmentAvailabilityStatusResult xmlns:a="Appointments" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <a:DateAndTimeSlot xmlns:b="Appointments.TO">
      <b:DateAndTimeslot>
        <b:Date>14/07/2016</b:Date>
        <b:TimeSlot>AM</b:TimeSlot>
      </b:DateAndTimeslot>
      <b:DateAndTimeslot>
        <b:Date>14/07/2016</b:Date>
        <b:TimeSlot>PM</b:TimeSlot>
      </b:DateAndTimeslot>
    </a:DateAndTimeSlot>
    <a:RequestStatus>0</a:RequestStatus>
  </AppointmentAvailabilityStatusResult>
</AppointmentAvailabilityStatusResponse>

XML if I serialise a dummy object - some differences which I'm trying to rectify, not sure if the namespaces are necessary for deserialisation though
<AppointmentAvailabilityStatusResponse>
<AppointmentAvailabilityStatusResult>
<DateAndTimeSlot xmlns=\"Appointments\">
<DateAndTimeslot>
<Date xmlns=\"Appointments.TO\">today</Date>
<TimeSlot xmlns=\"Appointments.TO\">now</TimeSlot>
</DateAndTimeslot>
</DateAndTimeSlot>
<RequestedStatus xmlns=\"Appointments\">0</RequestedStatus>
</AppointmentAvailabilityStatusResult>
</AppointmentAvailabilityStatusResponse>

Deserialiser
public static T DeserializeThis<T>(string cleanXml)
        {
            //string cleanXml = RemoveBom(dirtyXml);
            bool check = cleanXml.TrimStart().StartsWith("<");
            if (!string.IsNullOrEmpty(cleanXml) && cleanXml.TrimStart().StartsWith("<"))
            {
                try
                {
                    XmlSerializer xs = new XmlSerializer(typeof(T));
                    MatchCollection mc = Regex.Matches(cleanXml, @"</?(\d\w+)");
                    List<string> elements = new List<string>();

                    foreach (Match m in mc)
                    {
                        string cpval = m.Groups[1].Value;
                        if (!elements.Contains(cpval)) { elements.Add(cpval); }
                    }

                    foreach (string e in elements)
                    {
                        cleanXml = cleanXml.Replace(e, "d_" + e);
                    }

                    using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(cleanXml)))
                    {
                        using (StringReader sr = new StringReader(cleanXml))
                        {
                            return (T)xs.Deserialize(sr);
                        }
                    }
                }
                catch(XmlException x)
                {
                    var obj = (T)Activator.CreateInstance(typeof(T));
                    Type type = obj.GetType();
                    return (T)obj;
                }
            }
            else
            {
                var obj = (T)Activator.CreateInstance(typeof(T));
                Type type = obj.GetType();
                // add in the generic derived class property search and assign
                return (T)obj;
            }
        }

A:

Thank you to those who commented above - I finally got it working. Removing the XmlArray and not including Anonymous and IsNullable attributes seemed to be the issue although I am unsure why as it works with all of the other functions I have, serializable possibly doesn't need to be present either.
Working class structure minus the container as that didn't change:
[Serializable()]
    [XmlType(AnonymousType = true, Namespace = "")]
    public class AppointmentAvailabilityStatusResult : WebserviceMessage
    {
        [XmlElement("DateAndTimeSlot", Namespace = "Appointments")]
        public DateAndTimeSlot DateAndTimeSlot { get; set; }

        [XmlElement("RequestedStatus")]
        public int RequestedStatus { get; set; }
    }
    [Serializable()]
    [XmlType(AnonymousType = true, Namespace = "Appointments")]
    [XmlRoot(ElementName = "DateAndTimeSlot",Namespace = "Appointments", IsNullable = false)]
    public class DateAndTimeSlot
    {
        [XmlElement(ElementName = "DateAndTimeslot", Namespace = "Appointments.TO")]
        public List<DateAndTimeslot> DateAndTimeslot { get; set; }
    }

    [Serializable()]
    [XmlType(AnonymousType = true, Namespace = "Appointments.TO")]
    [XmlRoot(Namespace = "Appointments.TO", IsNullable = false)]
    public class DateAndTimeslot
    {
        [XmlElement("Date")]
        public string Date { get; set; }
        [XmlElement("TimeSlot")]
        public string TimeSlot { get; set; }
    }

