Подтвердить что ты не робот

Замена для XML-сериализации

У меня есть код, использующий XmlSerializer для сериализации/десериализации структуры данных для устойчивости. Я читал и слышал в нескольких местах здесь, в StackOverflow, что XmlSerializer является одним или несколькими из:

  • Bad
  • Плохо поддерживается/реализовано
  • Возможно, в будущем не будет поддерживаться

Мой вопрос в два раза; является ли любое из указанных выше истинным, и если да, то какие существуют альтернативы? Для моих целей XML работает очень хорошо, и я хотел бы сохранить эту константу, но все остальное можно изменить.

РЕДАКТИРОВАТЬ: Если вы хотите предложить что-то другое для XML, я открыт для него, но он нуждается в удобочитаемости.

4b9b3361

Ответ 1

XmlSerializer отлично поддерживается, но имеет некоторые сбои;

  • относительно медленно; но обычно это все еще достаточно быстро
  • поддерживает только публичных пользователей; может быть болью
  • требуется список аксессуаров для записи - просто уродливый

Тем не менее, я ожидаю, что он будет продолжаться там в течение значительного времени; ИМО, это BinaryFormatter, которая имеет реальные проблемы (при использовании для сохранения).

Я очень предвзятый (так как я автор), но я бы выбрал protobuf-net; двоичный сериализатор с использованием формата проводки "протокольных буферов" Google; быстрый, портативный между языками/платформами, очень малый выход, толерантность к версии и т.д. (и, конечно же, бесплатно). Ясно, что не xml, хотя - так не читается человеком.

Ответ 2

Что касается XML-сериализатора, там "поддерживается", а там "поддерживается".

Возрастающее количество отчетов об ошибках Connect в XML-сериализаторе возвращается с подтверждением ошибок и указывает, что ошибки не будут исправлены.

Я уверен, что если вы столкнулись с критикой безопасности в XML-сериализаторе, это будет исправлено. Однако я считаю маловероятным, что другие ошибки, которые не так критичны, будут исправлены.

Ответ 3

jSON намного быстрее, чем XML. Вы можете использовать Json.NET для его чтения. Он имеет встроенную сериализацию.

http://james.newtonking.com/pages/json-net.aspx

Ответ 4

Я собираюсь взять альтернативный взгляд:
XmlSerializer поддерживается, его поведение известно, и оно работает хорошо. Это не плохо". Он очень общий, хорошо документированный, имеет множество примеров. Производительность, вероятно, очень хороша для того, что вам нужно. Вероятно, он делает то, что вам нужно.

Есть некоторые люди, у которых есть особые потребности, которые не рассматриваются XmlSerializer. Из этих требований мы получаем такие вещи, как protobufs, DataContractSerializer и другие варианты.

Но XmlSerializer по-прежнему является очень общим и, вероятно, самым распространенным сериализатором в городе. Это, вероятно, самая безопасная ставка для сериализации контента.


Что касается поддержки...
MS может замедлить исправление ошибок. Я сравниваю это с WinForms. WinForms больше не является основной инфраструктурой пользовательского интерфейса, которая вытесняется Microsoft. Но он все еще зрелый, хорошо работает, хорошо работает. XmlSerializer - это то же самое.

Что касается поддержки в будущем. У MS есть 5 + 5 политика поддержки - они поддерживают продукт в течение 5 лет после его выпуска, а затем вы можете купить дополнительную поддержку за 5 лет..NET Framework не поддерживается "вещью" - это ОС Windows, которая поддерживает .NET, которая поддерживается. Windows 7 будет включать .NET 3.5 (я думаю, что версия 3.5?), И поэтому все в .NET 3.5, включая WinForms и XmlSerializer, будет "официально поддерживаться" еще на 5 лет, начиная с октября или всякий раз, когда выпускается Win7. Если это .NET 4.0, то все в 4.0 (включая, по-прежнему, WinForms и XmlSerializer) будет поддерживаться в течение 5 лет. 5-летние часы перезапускаются каждый раз, когда новый продукт поставляется с .NET.

Глядя на VB6 Runtime, он был первоначально отправлен в Visual Studio 6 в 1998 году. Он был включен в Windows с тех пор, включая Windows Server 2008 R2, выпущенный в этом году. Таким образом, время исполнения VB будет поддерживаться, по крайней мере, до 2014 года. Это, по крайней мере, 16-летняя поддержка.

Вам не о чем беспокоиться по поводу официальной поддержки. Это не проект с открытым исходным кодом, о котором вы говорите. Это не предложение, как WSE или SOAP Toolkit.

Верно, что существуют степени поддержки, а более старые .NET API занижаются в приоритетном порядке, поскольку новые и запущенные и продвинутые. Но более старые, по-видимому, более стабильны к тому времени, когда они плато. Вы полностью в безопасности.

Ответ 5

Если вы можете использовать .Net 3.5 (желательно SP1), я бы посмотрел DataContractSerializer. Хотя он менее конфигурируется, чем XmlSerializer, он быстрее, проще работать (по крайней мере, в моем опыте) и более переносимым (например, для веб-сервисов). SP1 изменил поведение по умолчанию, чтобы отказаться от него, поэтому вы можете сериализовать любой класс без явного определения атрибутов во всем, что вам нужно для сериализации.

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