Каков предпочтительный способ реализации сериализуемых классов в C # - PullRequest
2 голосов
/ 07 октября 2010

Я видел много разных способов сериализации объектов в C #, которые я не уверен, какой и когда использовать.

В текущей ситуации я сериализуюсь для экспозиции через WCF, поэтому я предполагаю, что атрибут [DataContract] - это путь.

В настоящее время я читаю в некотором XML, а затем выставляю полученный объект через WCF. Поэтому я десериализирую XML, для которого у меня нет доступа к исходным классам (поэтому я перестраиваю класс и могу реализовать сериализацию, как захочу). Затем он должен быть сериализуемым для WCF.

Но если [DataContract] подходит для этого случая, то почему бы мне не использовать его все время вместо ISerializable или атрибута [Serializable]?

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

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

Используя ISerializable, реализовав GetObjectData, вы можете настроить способ сериализации / десериализации объекта в классе объекта без необходимости создания сериализатора

Если вы создаете службу WCF, я думаю, вам следует придерживатьсяDataContract.Одним из его больших преимуществ является механизм включения (т.е. никаких неприятных сюрпризов).

2 голосов
/ 07 октября 2010

DataContract - хорошее место для начала основной сериализации.Но если вы хотите точно контролировать сериализацию объекта, используйте интерфейс ISerializable.Кроме того, атрибут контракта данных не наследуется, но ISerializable будет

ISerializable существует с .net 1.1.DataContract был введен в .net 3.0 для упрощения сериализации в большинстве случаев.

...