Quando usar os atributos DataContract e DataMember?

Estou muito confuso sobre oDataContract atributo no WCF. De acordo com meu conhecimento, é usado para serializar tipos definidos pelo usuário, como classes. Eu escrevi uma classe que é exposta no lado do cliente assim.

[DataContract]
public class Contact
{
    [DataMember]
    public int Roll { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Address { get; set; }

    [DataMember]
    public int Age { get; set; }
}

Está funcionando corretamente, mas quando removoDataContract eDataMember também funciona corretamente. Não consigo entender por que está funcionando corretamente. Alguém pode me dizer qual é o uso real deDataContract?

Meu contrato de serviço se parece com isso

[ServiceContract]    
public interface IRestServiceImpl
{
    [OperationContract]        
    Contact XmlData(string id);      
}

questionAnswers(7)

yourAnswerToTheQuestion