Практическое руководство. Создание базового контракта данных для класса или структуры

В этом разделе приведены основные этапы создания контракта данных с использованием класса или структуры. Дополнительные сведения о контрактах данных и их использовании см. в разделе "Использование контрактов данных".

Руководство по созданию базовой службы Windows Communication Foundation (WCF) и клиента см. в руководстве по началу работы. Рабочий пример приложения, состоящего из базовой службы и клиента, см. в разделе "Базовый контракт данных".

Создание базового контракта данных для класса или структуры

  1. Объявите, что типы имеют контракт данных, применив атрибут DataContractAttribute к классу. Обратите внимание, что все открытые типы, включая типы без атрибутов, сериализуемы. Сериализатор DataContractSerializer выводит контракт данных при отсутствии атрибута DataContractAttribute. Дополнительные сведения см. в разделе "Сериализуемые типы".

  2. Определите члены (свойства, поля или события), сериализуемые путем применения атрибута DataMemberAttribute к каждому члену. Эти члены называются членами данных. По умолчанию все открытые типы сериализуемы. Дополнительные сведения см. в разделе "Сериализуемые типы".

    Примечание.

    Можно применить атрибут DataMemberAttribute к закрытым полям, в результате чего данные будут предоставлены другим пользователям. Убедитесь, что член не содержит конфиденциальных данных.

Пример

В следующем примере показано создание контракта данных для типа Person путем применения атрибутов DataContractAttribute и DataMemberAttribute к классу и его членам.

using System;
using System.Runtime.Serialization;

[DataContract]
public class Person
{
    // This member is serialized.
    [DataMember]
    internal string FullName;

    // This is serialized even though it is private.
    [DataMember]
    private int Age;

    // This is not serialized because the DataMemberAttribute
    // has not been applied.
    private string MailingAddress;

    // This is not serialized, but the property is.
    private string telephoneNumberValue;

    [DataMember]
    public string TelephoneNumber
    {
        get { return telephoneNumberValue; }
        set { telephoneNumberValue = value; }
    }
}
<DataContract()> _
Public Class Person
    ' This member is serialized.
    <DataMember()> _
    Friend FullName As String

    ' This is serialized even though it is private.
    <DataMember()> _
    Private Age As Integer

    ' This is not serialized because the DataMemberAttribute 
    ' has not been applied.
    Private MailingAddress As String

    ' This is not serialized, but the property is.
    Private telephoneNumberValue As String

    <DataMember()> _
    Public Property TelephoneNumber() As String
        Get
            Return telephoneNumberValue
        End Get
        Set
            telephoneNumberValue = value
        End Set
    End Property
End Class

См. также