WCF DataContract требует сериализации? - PullRequest
1 голос
/ 16 декабря 2010

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

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

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

Спасибо!

Ответы [ 3 ]

4 голосов
/ 16 декабря 2010

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

1 голос
/ 16 декабря 2010

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

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

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

Для получения дополнительной информации см. Типы, поддерживаемые сериализатором контракта данных в MSDN.

0 голосов
/ 08 февраля 2011

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

...