Атрибут C # DataContract для частных полей? - PullRequest
2 голосов
/ 16 января 2012

Для класса, отмеченного атрибутом [DataContract], его частные поля, которые должны быть сериализованы, помечены как [DataMember]?

Пример:

[DataContract]
public class Component
{

// [DataMember] is not needed since public fields get automatically serialized
public int number;

// do I need [DataMember] here?
private string characters;

// [DataMember] is required here, but I also need to include the 
// attribute [DataMember] in this class's definition
private complexType cT;

Я читаю Класс DataContractAttribute правильно, верно?

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Нет, не похоже, что вы правильно читаете документацию.

DataContracts - это способ публичного обмена информацией, которая немного отличается от обычной сериализации.

Из документациистраница, на которую вы ссылаетесь:

Атрибут DataMemberAttribute должен быть применен к каждому члену типа контракта данных, чтобы указать, что это элемент данных, то есть он должен быть сериализован.

Но это применимо только в том случае, если вы добавляете атрибут [DataContract], как вы сделали.

1 голос
/ 16 января 2012

Интересно, что ссылка говорит:

По умолчанию DataContractSerializer выводит контракт данных и сериализует все общедоступные типы.Все открытые свойства чтения и записи и поля этого типа сериализуются.

В моих приложениях я обнаружил, что только свойства, которые включают [DataMember], сериализуются.Публичные свойства с общедоступными методами получения / установки не сериализуются, если я специально не добавлю к ним [Datamember].


Чтобы ответить на ваш конкретный вопрос, я бы пометил все 3 поля [DataMember] и complexType класс также должен быть помечен как [DataContract].

...