Мне нравится ответ Марка, но я хочу добавить еще немного информации.
DataContractSerializer и DataContractJsonSerializer поддерживают из коробки многие другие модели сериализации. Это включает в себя IXmlSerializable, Serializable и ISerializable. Поддержка POCO была добавлена в .NET 3.5 SP1, но поддержка этих других моделей была всегда с .NET 3
В этом сообщении в блоге подробно описывается степень поддержки и, что более важно, приоритизация различных моделей сериализатором (т. Е. Он сообщает вам, что будут делать сериализаторы на основе DataContract, если у вас один тип, украшенный несколько моделей сериализации)
Итак, если вы прочитаете это сообщение в блоге, вы заметите, что поддержка POCO является последней в списке приоритетов. Это последнее средство сериализатора, если нет абсолютно никакой другой доступной модели программирования сериализации для типа или его родителя. Например, если тип является перечислимым какого-либо рода, он будет сериализован в соответствии с традиционными правилами сбора . Если он ISerializable или Serializable, он будет сериализован в соответствии с их правилами сериализации.
Другое важное отличие: при десериализации всех других типов конструктор по умолчанию с нулевыми параметрами никогда не вызывается. Для типов POCO это всегда вызывается! Это дает вам дополнительный хук, который вы не так легко используете в других моделях сериализации!