如何:创建类或结构的基本数据协定

本主题演示使用类或结构创建数据协定的基本步骤。 有关数据协定及其用法的详细信息,请参阅使用数据协定

有关演练创建 Windows Communication Foundation (WCF) 服务和客户端的步骤的教程,请参阅入门教程。 有关由基本服务和客户端组成的可正常运行的示例应用程序,请参阅基本数据协定

创建类或结构的基本数据协定

  1. 通过将 DataContractAttribute 属性应用于类来声明该类型具有数据协定。 请注意,包括不带属性的公共类型在内的所有公共类型都是可序列化的。 如果不存在 DataContractSerializer 属性,DataContractAttribute 将推断出一个数据协定。 有关详细信息,请参阅可序列化类型

  2. 通过将 DataMemberAttribute 属性 (Attribute) 应用于每个成员来定义要序列化的成员(属性 (Property)、字段或事件)。 这些成员称为数据成员。 默认情况下,所有公共类型都是可序列化的。 有关详细信息,请参阅可序列化类型

    备注

    您可以将 DataMemberAttribute 属性应用于私有字段,这会导致向其他人公开此数据。 请确保成员不包含敏感数据。

示例

下面的示例演示如何通过将 PersonDataContractAttribute 属性应用于类及其成员来创建 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

请参阅