NetDataContractSerializer против DataContractSerializer - PullRequest
8 голосов
/ 25 октября 2011

У нас есть приложение с объектами, которые мы хотели бы сохранить сериализованными в базе данных.
В настоящее время мы используем NetDataContractSerializer, но недавно выяснилось, что из-за информации о типах .Net оно создаетогромные файлы, что означает медленное применение даже для базовых объектов.
Мы вместо этого рассматриваем возможность переключения на DataContractSerializer, и я искал хорошее сравнение двух, но не нашел ни одного.

  • Какая разница в размерах между объектами, созданными двумя?
  • Есть большая разница в производительности?
  • Является ли какой-либо из них проблематичным, когда у меня есть объект, который содержит List<X>, где X наследуется несколькими другими объектами, так что список содержит много разных типов во время выполнения?(Мне сказали, что DataContractSerializer можно присвоить KnownTypes атрибутов, но это означает, что в коде больше зависимостей. Есть ли способ заставить DataContractSerializer знать все эти типы в моем решении?)

Спасибо.

1 Ответ

10 голосов
/ 28 октября 2011
  1. NetDataContractSerializer (NetDCS) записывает информацию о типе для всех объектов, в то время как DataContractSerializer (DCS) записывает только те, которые необходимы (т. Е. Если вы объявляете элемент как тип B, и фактическое значение элемента присериализуемый тип имеет тип D, где D является производным типом от B, поэтому в сериализованном типе DCS намного меньше «шумов».
  2. Не совсем, но вы должны попробовать оба сценария, чтобыпосмотрите, повлияет ли это на вас
  3. Вам нужно использовать известные типы в DCS, но вы можете использовать DataContractResolver, если вы не хотите работать с известными типами. Примером такого преобразователя может бытьможно найти в блоге Юсефа Массауи , а дополнительную информацию о самом преобразователе можно найти в моем посте о расширяемости WCF по адресу http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/21/wcf-extensibility-data-contract-resolver.aspx.
...