2010-12-16 4 views
1

Класс, который имеет атрибут [DataContract], не автоматически ли он сериализуется? Если нет, необходимо ли использовать атрибут [Serializable] (или наследовать от ISerialize)?WCF DataContract требует сериализации?

Я спрашиваю об этом, потому что у меня есть старый код из предыдущего проекта, который, по-видимому, в классах [DataContract] ничего не говорит о сериализации.

Окончательный вопрос: Я хочу, чтобы операция WCF (метод) возвращала класс DataContract. Должен ли метод явно сериализовать класс перед его возвратом или он автоматически сериализуется? Я всегда думал, что это будет последнее.

Спасибо!

ответ

4

Нет, [Serializable] не требуется по контракту с данными. Для XML-сериализации также не требуется.

1

Существует несколько вариантов сериализации в .NET. SerializableAttribute и ISerializable возвращаются к началу и используются BinaryFormatter, SoapFormatter и т. Д.

DataContractSerializer, будучи относительно новым, может поддерживать объекты, которые определяют их способность к сериализации с помощью SerializableAttribute, но это необязательно. Если вы просто сериализуете объект с помощью DataContractSerializer, то использование атрибутов контракта данных - все, что вам нужно сделать.

Очевидно, что члены, которые вы отмечаете как сериализуемые, также должны быть сериализуемыми.

Для получения дополнительной информации см. Types Supported by the Data Contract Serializer на MSDN.

+0

Итак, кажется, что атрибут DataContract - это то, что говорит ему использовать DataContractSerializer в первую очередь. – AlvinfromDiaspar 2010-12-16 17:11:04

+0

@Alvin: нет, по умолчанию используется сериализатор данных. – 2010-12-16 19:32:09

0

Чтобы добавить к этому, DataContractSerializer поддерживает гораздо больше, чем просто типы DataContract. См. Это превосходное сообщение в блоге для подробного прохода всего юниверса типов, поддерживаемого DataContractSerializer: http://blogs.msdn.com/b/sowmy/archive/2006/02/22/536747.aspx

Смежные вопросы