Сценарии, в которых не удается выполнить сериализацию Xml в .NET - PullRequest
5 голосов
/ 08 апреля 2009

Я хотел бы знать наиболее распространенные сценарии, когда сериализация XML может завершиться неудачей в .NET.

Ответы [ 6 ]

4 голосов
/ 08 апреля 2009

Я думаю в основном о XmlSerializer здесь:

  • ограничено древовидными данными; он не может обрабатывать полные графы объектов
  • ограничено публичными членами, в публичных классах
  • это действительно мало что может сделать с object членами
  • у него есть некоторые недостатки в отношении дженериков
  • как и многие сериализаторы, он не затрагивает свойства экземпляра в коллекции (прежде всего, плохая практика)
  • xml просто не всегда хороший выбор для больших данных (не в последнюю очередь, для производительности)
  • требуется открытый конструктор без параметров

DataContractSerializer решает некоторые из них, но имеет свои ограничения:

  • не может обрабатывать значения в атрибутах
  • требует .NET 3.0 (поэтому не так много пользы в 2.0)
3 голосов
/ 08 апреля 2009

Невозможно легко сериализовать общие коллекции.

См. Другой вопрос: Сериализация XML C # Gotchas

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

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

1 голос
/ 08 апреля 2009

В зависимости от сериализатора циклические ссылки могут не работать

0 голосов
/ 08 апреля 2009

AFAIK, классы, помеченные как [устаревшие], не сериализуются XmlSerializer, так как .NET 2.0

0 голосов
/ 08 апреля 2009

TimeSpan объекты не сериализуются. IDictionary - реализуемые типы также не сериализуемы (хотя они могут быть сериализованы с некоторым ручным массажем).

...