ciao, in realtà, un servizio web o wcf non inviano mai un oggetto reale, in quanto questo è solo in memoria nel server, inviano il corrispondente serializzato, ma il client probabilmente, non ha bisogno di tutti i dati di un datatable, quindi sprecheresti solo banda e risorse. Ti conviene, a limite, stabilire un oggetto che puoi inviare al client con i dati che li servono, per fare questo, potresti utilizzare gli attributi sulla classe che decidi di inviare (eventualmente mandi una List<tuoOggetto>), in questo modo, viene serializzata automaticamente per essere inviata al client.

se osservi il codice sotto (preso da qui ), vedrai l'uso degli attributi su una classe da restituire e/o usare come argomenti dei metodi del servizio.

codice:
    [DataContract(Name = "UserArgsSMS", Namespace = "")]
    public class UserArgsSMS
    {
        [DataMember(Name = "PhoneNumber")]
        public string PhoneNumber { get; set; }
        [DataMember(Name = "Text")]
        public string Text { get; set; }
    }
a questo punto potrai anche inviare una List<UserArgsSMS>. Sul client, quando aggiungerai un riferimento al servizio, verrà creato il nemespace contenente anche questa classe.