Сериализация XML - Когда Использовать DataContractSerializer / Двоичный файл / XMLSerialiser

Я смотрел на это некоторое время теперь

Кажется, что двоичной сериализации препятствуют как какое-либо изменение в сериализации повреждений имен полей =?Не очень

XMLSerializer проблематичен, потому что Вы не должны предоставлять никакому конструктору аргумента и общедоступным полям, хотя Вы действительно имеете больше контроля над элементами, являющимися атрибутами или элементами и их именованием

DataContractSerializer хорош, но весь suclassses должен быть явно добавлен, который является позором

Однако я споткнулся через NetDataContractSerializer, который не имеет этого ограничения.

Если Вашей целью является сериализация C#, и никакие большие ограничения на размер xml всегда NetDataContractSerializer способ пойти сюда??

5
задан casperOne 7 April 2012 в 20:54
поделиться

2 ответа

Дэн Ригсби написал действительно хорошую сравнительную статью XmlSerializer vs. DataContractSerializer, а также коснулся NetDataContractSerializer.

DataContractSerializer:

  • он быстрый - примерно на 10% быстрее, чем XmlSerializer
  • он совместим - безупречно работает с Java, Ruby - вы называете его
  • использует эксплицитную модель "opt-in" - вам нужно отметить, что сериализуется
  • не требует никакого конструктора
  • , который может сериализовать непубличные члены, а внутренние поля
  • не поддерживают атрибуты на XML узлах

Вы явно говорите DCS , что нужно сериализовать, но вы не имеете особого влияния на , как это делается .

XmlSerializer

  • сериализует только открытые поля и свойства
  • сериализует всё, кроме тех, что вы исключаете (opt-out model)
  • поддерживает атрибуты и всё
  • что взаимодействует - безупречно работает с Java, Ruby - вы называете его
  • требует безпараметрического конструктора для десериализации

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

NetDataContractSerializer немного странный - он не взаимодействует, он работает только если оба конца .NET - он включает в сообщение информацию о типе .NET (что делает его больше). Вы не можете добавить это декларативно к службе WCF "из коробки".

Это жесткий компромисс - как всегда. Определенно держитесь подальше от любого бинарного формататера - это не обратно совместимо, хрупко и обязательно доставит вам головную боль - используйте один из этих стандартных способов. Какой из них является "лучшим" для данного сценария действительно трудно сказать - вам придется выяснить это для себя....

.
11
ответ дан 18 December 2019 в 14:47
поделиться

Поскольку уже есть несколько хорошие точки, я просто хочу добавить одно:

В некоторых проектах мы даже зашли настолько далеко, что разместили все интерфейсы в одном подпроекте (maven module) и реализации в другом. Таким образом, можно было ПОЛНОСТЬЮ отделить интерфейсы от реализаций и завершить проект интерфейса на самом раннем этапе проекта и передать его другим командам, работающим над этими интерфейсами. В рамках каждого из проектов мы использовали одни и те же пакеты.

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

-121--2207933-

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

Например: Bing и Google

Если у вас есть определенный агент, вызывающий проблемы, вы можете либо заблокировать его специально, либо посмотреть, можно ли настроить его.

-121--4126736-

Марк Гравелл показывает в своем блоге результаты теста , выполненного им с DataContractSerializer, GroupSerializer и большинством других сериализаторов .NET, включая protobuf-net (реализация буферов протоколов для .NET

2
ответ дан 18 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: