2011-04-19 2 views
1

У меня есть разные XML-файлы, которые мне нужно будет прочитать. Мне интересно, следует ли десериализовать файлы в пользовательские объекты или просто прочитать данные с помощью объектов XDocument и Linq-to-XML.XML-сериализация или чтение XML-объектов?

Размер файлов варьируется от 1-2кБ до 3 Мб +, а разные объекты также имеют сложность (некоторые из них имеют атрибуты, некоторые имеют дочерние элементы, некоторые из них - некоторые).

Я полагаю, что работать с объектами проще, чем Linq-to-XML, но для создания этих объектов потребуется некоторое время. Существуют ли какие-либо эмпирические правила или предложения о том, когда следует десериализовать, а не Linq?

Спасибо за помощь!

ответ

2

Это действительно зависит от того, что вы делаете с данными. Если вы не используете всю информацию, предоставленную XML-документом, то подход на основе LINQ, вероятно, самый простой. Подумайте о том, чтобы взять RSS-канал и отслеживать только даты публикации, и ничего больше. В этом случае использование метода десериализации действительно ничего не делает для вас.

Если вы используете примерно каждый последний бит данных в документе XML, а его структура отражает структуру вашей объектной модели, то, безусловно, десериализуйте ее. Это то, что я делаю все время для таких вещей, как файлы настроек и даже простые форматы файлов.

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

+0

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

1

Вы можете использовать xsd.exe инструмент, который может генерировать эти классы из вас дали файл XML:

C:\work>xsd test.xml 
C:\work>xsd /classes test.xsd 

Там нет действительно эмпирическое правило. Лично я предпочитаю работать с сильно типизированными объектами, если размеры файлов не становятся большими, и в этом случае я переключаюсь на XmlReader.

Смежные вопросы