Прочитать на английском

Поделиться через


DataMemberAttribute Класс

Определение

При применении к элементу типа указывает, что этот элемент является частью контракта данных и сериализуется DataContractSerializer.

[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)]
public sealed class DataMemberAttribute : Attribute
Наследование
DataMemberAttribute
Атрибуты

Примеры

В следующем примере показан тип, к которому DataContractAttribute применены атрибуты и DataMemberAttribute . Свойству Name в свойстве DataMemberAttribute присвоено значение ID.

using System;
using System.Collections;
using System.IO;
using System.Runtime.Serialization;
using System.Xml;

// You must apply a DataContractAttribute or SerializableAttribute
// to a class to have it serialized by the DataContractSerializer.
[DataContract()]
class Person : IExtensibleDataObject
{
    private string LastNameValue;
    // Apply the DataMemberAttribute to fields (or properties)
    // that must be serialized.
    [DataMember()]
    public string FirstName;

    [DataMember]
    public string LastName
    {
        get { return LastNameValue; }
        set { LastNameValue = value; }
    }

    [DataMember(Name = "ID")]
    public int IdNumber;

    // Note that you can apply the DataMemberAttribute to
    // a private field as well.
    [DataMember]
    private string Secret;

    public Person(string newfName, string newLName, int newIdNumber)
    {
        FirstName = newfName;
        LastName = newLName;
        IdNumber = newIdNumber;
        Secret = newfName + newLName + newIdNumber;
    }

    // The extensionDataValue field holds data from future versions
    // of the type.  This enables this type to be compatible with
    // future versions. The field is required to implement the
    // IExtensibleDataObject interface.

    private ExtensionDataObject extensionDatavalue;

    public ExtensionDataObject ExtensionData
    {
        get
        {
            return extensionDatavalue;
        }
        set
        {
            extensionDatavalue = value;
        }
    }
}

public class Test
{
    public static void Main(string[] args)
    {
        try
        {
            WriteObject(@"DataMemberAttributeExample.xml");
            ReadObject(@"DataMemberAttributeExample.xml");
        }
        catch (Exception exc)
        {
            Console.WriteLine(
            "The serialization operation failed: {0} StackTrace: {1}",
            exc.Message, exc.StackTrace);
        }
        finally
        {
            Console.WriteLine("Press <Enter> to exit....");
            Console.ReadLine();
        }
    }

    public static void WriteObject(string filename)
    {
        // Create a new instance of the Person class.
        Person p1 = new Person("Zighetti", "Barbara", 101);
        FileStream writer = new FileStream(filename,
        FileMode.OpenOrCreate);
        DataContractSerializer ser =
            new DataContractSerializer(typeof(Person));
        ser.WriteObject(writer, p1);
        writer.Close();
    }

    public static void ReadObject(string filename)
    {
        // Deserialize an instance of the Person class
        // from an XML file.
        FileStream fs = new FileStream(filename,
        FileMode.OpenOrCreate);
        DataContractSerializer ser =
            new DataContractSerializer(typeof(Person));
        // Deserialize the data and read it from the instance.
        Person deserializedPerson = (Person)ser.ReadObject(fs);
        fs.Close();
        Console.WriteLine(String.Format("{0} {1}, ID: {2}",
        deserializedPerson.FirstName, deserializedPerson.LastName,
        deserializedPerson.IdNumber));
    }
}

Комментарии

Применяйте атрибут DataMemberAttribute совместно с атрибутом DataContractAttribute для определения элементов типа, входящих в контракт данных. DataContractSerializer является одним из сериализаторов, которые могут сериализовать контракты данных.

Модель контракта данных является моделью, включаемой по требованию. Применение атрибута DataMemberAttribute к полю или свойству явно задает сериализацию значения элемента. Напротив, XmlSerializer сериализует все открытые поля и свойства типа.

Внимание!

Атрибут DataMemberAttribute можно применять к закрытым полям или свойствам. Имейте в виду, что данные, возвращаемые элементом (даже если он является частным), будут сериализованы и десериализуются и, таким образом, могут просматриваться или перехвачены злоумышленником или процессом.

По умолчанию имя элемента среды CLR используется в качестве имени элемента данных. Задав значение свойству Name, можно указать имя элемента данных. Этим можно воспользоваться, чтобы задать имя, запрещенное в качестве имени элемента среды CLR. При сопоставлении с XML с помощью DataContractSerializer это имя используется в качестве имени элемента схемы в типе.

Примечание

Свойства, к которым DataMemberAttribute был применен атрибут, должны иметь поля get и set . Они не могут быть get-only или set-only. Чтобы сериализовать свойство, которое должно оставаться getтолько по умолчанию (например, свойство, возвращающее коллекцию), рассмотрите DataMemberAttribute возможность применения к резервному полю.

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

Конструкторы

DataMemberAttribute()

Инициализирует новый экземпляр класса DataMemberAttribute.

Свойства

EmitDefaultValue

Возвращает или задает значение, указывающее, следует ли сериализовать значение по умолчанию сериализуемого поля или свойства.

IsNameSetExplicitly

Получает значение, указывающее, был ли объект Name задан явно.

IsRequired

Возвращает или задает значение, указывающее модулю сериализации, что чтение и десериализация производятся при наличии элемента.

Name

Возвращает или задает имя элемента данных.

Order

Возвращает или задает порядок сериализации и десериализации элемента.

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

(Унаследовано от Attribute)

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

(Унаследовано от Attribute)
GetHashCode()

Возвращает хэш-код данного экземпляра.

(Унаследовано от Attribute)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.

(Унаследовано от Attribute)
Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.

(Унаследовано от Attribute)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.

(Унаследовано от Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от Attribute)

Применяется к

См. также раздел